最近在学编译原理,编译的第一步是词法分析
于是就打算做一个词法分析器,可以将特定的串(123456789)转化为另一个特定的串(matrix123),并且统计单词数目以及字符个数
第一步是编写lex文件(example.l)
int num_ids = 0, num_chars = 0;
%%
123456789 {printf("<span style="font-size:18px;">matrix123</span>");num_chars+=9;}
[a-zA-Z]+ {printf("%s",yytext);num_chars+=yyleng;++num_ids;}
. {printf("%s",yytext);++num_chars;}
%%
main()
{
yylex();
printf("# of ids = %d, # of chars = %d\n ", num_ids, num_chars);
}
第二步调用flex生成lex.yy.c
在flex.exe的文件下运行命令 flex < example.l
然后就生成了lex.yy.c
第三步新建一个项目(我用的VS2013)
添加lex.yy.c以及libfl.lib
第四步 调试
有两个错误
1.
只要将fileno更新为_fileno即可
2.
在忽略的定默认库里添加LIBC.lib就好
第五步 运行
然后就有了ley.yy.exe
再加一个输入文件in.txt
在该目录下运行 lex.yy.exe < in.txt
然后就可以了