导致错误的 Bison 打印字符
Bison print character which caused an error
我正在使用 Bison 和 Flex 开发一个简单的编译器。我的语法只接受字符串 [a-z]+
。如果输入是 a0
,我想显示一条错误消息,类似于 'unrecognized character 0'。目前,所有非语法的东西最终都被 .
截获。所以字符串 a0
导致语法错误。我确实将 Bison parse.error
设置为详细但它给了我对用户无用的标记。有没有一种方法可以显示我想要的内容,即向用户显示输入到底有什么问题?
这在词法分析器中比在解析器中更容易做到。如果你的词法分析器(.l 文件)以这样的规则结尾:
. { yyerror("ignoring unrecognized character '%c' in input", *yytext); }
然后将简单地跳过伪造字符(并打印消息)。或者,您可以 return 它们作为解析器的(单个)标记
. { return *yytext; }
然后,如果您在 bison 代码中设置 %define parser.error verbose
,您将收到语法错误,显示意外标记以及预期的标记。
我正在使用 Bison 和 Flex 开发一个简单的编译器。我的语法只接受字符串 [a-z]+
。如果输入是 a0
,我想显示一条错误消息,类似于 'unrecognized character 0'。目前,所有非语法的东西最终都被 .
截获。所以字符串 a0
导致语法错误。我确实将 Bison parse.error
设置为详细但它给了我对用户无用的标记。有没有一种方法可以显示我想要的内容,即向用户显示输入到底有什么问题?
这在词法分析器中比在解析器中更容易做到。如果你的词法分析器(.l 文件)以这样的规则结尾:
. { yyerror("ignoring unrecognized character '%c' in input", *yytext); }
然后将简单地跳过伪造字符(并打印消息)。或者,您可以 return 它们作为解析器的(单个)标记
. { return *yytext; }
然后,如果您在 bison 代码中设置 %define parser.error verbose
,您将收到语法错误,显示意外标记以及预期的标记。