我的解析器正在识别语法并使用 yylineno 指示正确的错误行。我想打印导致错误的符号。
int yyerror(string s)
{
extern int yylineno; // defined and maintained in lex.yy.c
extern char *yytext; // defined and maintained in lex.yy.c
cerr << "error: " << s << " -> " << yytext << " @ line " << yylineno << endl;
//exit(1);
}
当我写一些语法不可接受的内容时,我会收到此错误:
错误:语法错误 -> 分段错误
我不应该使用 yytext 吗?如果不是,哪个变量包含导致语法错误的符号?
Thanks
根据您使用的 lex 版本,yytext
可以是数组,也可以是指针。由于它是在不同的编译单元中定义的,如果它是一个数组并且您将其声明为指针,您将不会看到来自编译器或链接器的任何错误消息(链接器通常不进行类型检查)。相反,它会将数组中的前几个字符视为指针,并尝试取消引用它,并且可能会崩溃。
如果你使用的是flex,你可以添加一个%pointer
声明 .l 文件的第一部分,以确保它是指针而不是数组
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)