MacOS下使用flex
MacOS下使用flex
本文介绍如何在MacOS下编译flex的代码。
首先撰写一个fb1-1.l
1:
/* just like Unix wc */
%{
int chars = 0;
int words = 0;
int lines = 0;
%}
%%
[a-zA-Z]+ { words++; chars += strlen(yytext); }
\n { chars++; lines++; }
. { chars++; }
%%
main(int argc, char **argv)
{
yylex();
printf("%8d%8d%8d\n", lines, words, chars);
}
这个代码就是统计lines
,words
,chars
的数量。flex源代码实际上就是C代码,但是它里面加入了规则匹配的macros,用%%
来进行分割。接下来使用flex
编译上面的代码。MacOS自带flex
:
$ which flex
/usr/bin/flex
我们可以直接使用flex
命令进行编译:
$ flex fb1-1.l
上面会把fb1-1.l
扩展成lex.yy.c
,也就是把.l
文件里面的macros扩展成真正的C代码。展开后的ley.yy.c
里面内容很多,可以自己看一看。
下面是编译lex.yy.c
:
$ cc lex.yy.c -ll
fb1-1.l:17:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main(int argc, char **argv)
^
1 warning generated.
上面编译的重点,是要在MacOS下用-ll
选项来加载flex的库,而不是linux环境下的-lf
。
编译成功后,生成的可执行文件是a.out
,可以用起来看看效果:
$ echo "Hello, world" | ./a.out
1 2 13
可以看到我们的程序统计出来的行数,字数,和字符数。
以上是flex在macos环境中的使用方法。
- 上一篇 Spark的流式数据处理
- 下一篇 Python的正则表达式使用