编译原理在类Unix/Lunix上使用flex

2021-05-21 15:06:27 浏览数 (2)

flex,前身是lex,lex是1975年由Mike Lesk和当时尚在AT&T实习的Eric Schmidt共同完成的基于UNIX环境的词法分析器的生成工具。这个lex很有名气,但是无奈效率太低加上有bug,让人用的很不爽。后来伯克利实验室的Vern Paxson用C重新写了lex,并命名为flex(Fast Lexical Analyzer Generator)。

下面是使用方法,流程图如上所示

①首先创建一个.l文件,里面写上

代码语言:javascript复制
%{
int chars = 0;
int words = 0;
int lines = 0;
%}

%%

[a-zA-Z]  {words  ; chars  = strlen(yytext);}
n  { chars  ; lines  ; }
.  { chars  ; }

%%

int main(int argc, char **argv){
   yylex();
   printf("lines: � words: � chars: �n", lines, words, chars);
}

②接下来打开终端

输入一下命令:

flex test.l //生成一个就叫做 “lex.yy.c”的文件

③输入以下命令,生成a.out文件来读取输入输出

/* this action would generate a file named a.out which would be used for reading inputs and print outputs */ cc lex.yy.c -ll //参数-ll为mac上运行,如果不好用(Linux上运行),试试参数-lfl

④执行a.out

命令行中输入./a.out

输入一些字符,按下ctrl D退出。

最后会出现lines、words、chars的个数。

参考资料:https://blog.csdn.net/u013225150/article/details/51241256

http://www.itdaan.com/keywords/Flex Bison Using flex on OSX 在mac上使用Flex.html

0 人点赞