注:工作环境不变。
本工作目标是让lex和yacc合作,替代scan.c和parse.c,从而可以构建出灵活可扩展的编译器。
假定所有源码均未被修改。
需修改文件:TINY.L和TINY.Y.
在TINY.L文件的最后,添加函数 yywrap()
int yywrap()
{
return 1;
}
在ITNY.Y文件中将函数 static int yylex()注释掉(或删除掉)。
文件修改即到此为止。
使用命令:yacc -d TINY.Y生成y.tab.c和y.tab.h文件。
使用命令:lex TINY.L生成lex.yy.c文件。
将此三个文件和其他源码文件(不包含scan.c和parse.c)加入到一新建工程中。编译即可。
可以发现编译成功。
拷贝出可执行文件,尝试执行,却发现程序如下异常:
程序卡在标准输入界面。正常情况下应同不使用lex和yacc的源码执行一样,生成.tm文件。
当输入两行字符时,出现:
不解!
我调试了很久,却始终如此。
我在想,是不是我修改了TINY.L文件,确切的说,是不是我加入的yywrap()函数问题。
希望各位指教!