我正在用Bison和Flex开发一个简单的编译器。我的语法只接受字符串[a-z]+。如果输入是a0,我想显示一条错误消息,类似于“无法识别的字符0”。现在,所有非语法的东西最终都会被.截取.因此,字符串a0导致语法错误。我确实将Bison parse.error设置为详细,但它给了我对用户无用的令牌。是否有一种方法可以显示我想要的东西,即告诉用户输入到底有什么问题?
发布于 2021-12-23 22:57:09
这在lexer中是最简单的,而不是在解析器中。如果您的lexer (.l文件)以如下规则结尾:
. { yyerror("ignoring unrecognized character '%c' in input", *yytext); }然后简单地跳过假字符(并打印消息)。或者,您可以将它们作为(单个)令牌返回给解析器。
. { return *yytext; }然后,如果在bison代码中设置%define parser.error verbose,则会得到显示意外令牌和预期标记的语法错误。
https://stackoverflow.com/questions/70464953
复制相似问题