编译原理_词法分析

时间:2021-05-11 19:53:51

最近在学编译原理,编译的第一步是词法分析

于是就打算做一个词法分析器,可以将特定的串(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 然后就可以了