Tag: multiline

为什么flex / bison中的多行注释如此回避?

我正在尝试在我的flex(.l)文件中解析C风格的多行注释: %s ML_COMMENT %% … “/*” BEGIN(ML_COMMENT); “*/” BEGIN(INITIAL); [.\n]+ { } 我没有返回任何令牌,我的语法(.y)不以任何方式处理评论。 当我运行我的可执行文件时,我得到一个解析错误: $ ./a.out /* abc def Parse error: parse error $ echo “/* foo */” | ./a.out Parse error: parse error (我的yyerror函数执行printf(“解析错误:%s \ n”),这是冗余错误消息的前半部分来自)。 我可以看到为什么第二个示例失败,因为整个输入是注释,并且由于语法忽略了注释,因此没有语句。 因此输入不是有效的程序。 但是在我完成评论之前,第一部分抛出了一个解析错误。 同样令人困惑: $ ./a.out /* foo */ a = b; Parse error: parse error 在这种情况下,注释在实际有效输入之前关闭(没有注释,解析就好了)。 在解析“a”之后实际发生失败,而不是在尝试解析赋值“a […]