实验三 使用Lex自动生成扫描程序
需要工具:flex, bison
前期准备:
1、下载flex, bison,正常下载安装
网址:http://gnuwin32.sourceforge.net/packages/flex.htm
http://gnuwin32.sourceforge.net/packages/bison.htm
2、测试
一个简单的示例:文件名fb1-1.l (一杠一 后缀字母L)
%{
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("%8d%8d%8d\n", lines, words, chars);
}
在powershell里面输入以下命令生成 .c文件
flex fb1-1.l //generates a new file named "lex.yy.c"
问题如下:
1、但是编译的时候出现了问题,显示无法编译 .c 文件
通过安装最新的GCC解决了问题
下载网址https://sourceforge.net/projects/mingw/files/中的downloads
2、在编译的时候显示fb1-1.l:9:20:
C:\Users\xxxx\AppData\Local\Temp\ccMYKMLn.o:lex.yy.c:(.text+0x316): undefined reference to `yywrap'
通过在 .l 开头添加 %option noyywrap 解决问题
3、在命令行输入 a.exe显示无此命令,但是文件的确存在
后来发现因为我打开的是powershell,得输入./a.exe