编译原理实验手记
知识点
如何理解
bison -d
的-d
选项?
可以在英文版 flex and bison 中的 P13 找到如下解释:
First it runs bison with the -d (for “definitions” file) flag, which creates fb1-5.tab.c and fb1-5.tab.h, and it runs flex to create lex.yy.c.
%option
怎么用?
flex and bison 中解释:
If you set %option yylineno, flex defines yylineno to contain the current line number and automatically updates it each time it reads a character.
C 语言
atoi()
的作用?
将字符串转换为 int。
如何理解
yytext
?
见 flex and bison:
In any flex action, the variable yytext is set to point to the input text that the pattern just matched.
如何理解 C 语言
strcpy()
函数?
头文件:#include <string.h>
定义函数:char *strcpy(char *dest, const char *src);
函数说明:strcpy()
会将参数 src
字符串拷贝至参数 dest
所指的地址。
返回值:返回参数 dest
的字符串起始地址。
如何理解
yywrap()
?
When a lex scanner reached the end of yyin, it called yywrap(). The idea was that if there was another input file, yywrap could adjust yyin and return 0 to resume scanning. If that was really the end of the input, it returned 1 to the scanner to say that it was done.
如何解决
parser.y:1.1-14: warning: deprecated directive: ‘%error-verbose’, use ‘%define parse.error verbose’ [-Wdeprecated]
?
使用 %define "parse.error" "verbose"
代替原来的
%define parse.error verbose
。
具体参考:StackOverflow
Bugs 记录
问题一
问题描述:
解决办法,
将
改成
这个属于库函数的用法,需要查阅相关文档。
问题二
这个问题属于重复定义问题。
解决方法:
在相应头文件中将所有重复定义的变量声明成外部变量。
如:
将
改成
再如:
将
改成
将这两个问题解决后,发现可以正常编译,且编译出来的可执行文件可以正常运行: