我正在改进我的编译器分配的错误报告。我使用下面的代码处理Flex中未结束的评论:如何指示解析器不要继续处理未终止的注释?
<INITIAL>"/*" {BEGIN(COMMENT);}
<COMMENT>"*/" {BEGIN(INITIAL);}
<COMMENT>([^*]|\n)+ {}
<COMMENT><<EOF>> {yyerror("UNTERMINATED COMMENT"); BEGIN(INITIAL);}
的问题是,解析器打印其错误的讯息:
$ ./comp tests/comments.cf
ERROR: UNTERMINATED COMMENT: 27
ERROR: syntax error: 27
我怎么能指示解析器不会继续是工作?在BEGIN(INITIAL)
之后加上一个exit
给了我想要的东西,但似乎并没有办法处理它。
顺便说一句,你的''规则是不正确的;没有规则与注释中的“*”匹配,因此会落入默认规则。如果你的默认规则是'。 {return yytext [0];这会造成特别的灾难性后果。如果默认规则是弹性生成的默认值('ECHO'),它将会很奇怪。另外,字符集'[^ *]'包含'\ n',所以'| \ n'是多余的。 –
rici