野牛自定义语法错误

时间:2016-12-31 15:09:04

标签: syntax-error bison flex-lexer

我有一些 C 编译器和matlab语言翻译器的语法规则。我想捕获由于缺少&#39 ;;'而导致的语法错误。在声明的最后。

例如我有return语句:

  stmt_return :     RETURN      {...some actions...}
                    exp ';'     {...others actions...}

              |     RETURN      {...some actions...}
                    ';'         {...others actions...}

我如何处理缺乏&#39 ;;'并打印自定义错误消息而不是默认消息"语法错误"。

我尝试添加这些规则但正确地产生了冲突:

  stmt_return :     RETURN  exp    { yyerror("...")}

              |     RETURN { yyerror("...")}

1 个答案:

答案 0 :(得分:0)

我找到了这个解决方案:

stmt_return :     RETURN      {...some actions...}
                  exp sc     {...others actions...}

            |     RETURN      {...some actions...}
                  sc         {...others actions...}
            ;

sc          : ';'
            | { yyerror("Missing ';'"); }   error
            ;