2016-12-31 99 views
0

我有一些编译器和翻译到Matlab语言的一些文法规则。我想捕获由于缺少';'而导致的语法错误。在发言结束时。野牛自定义语法错误

比如我有return语句:

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

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

我如何处理缺少 ';'并打印自定义错误消息而不是默认消息“语法错误”。

我尝试添加这些规则,而是正确地产生冲突:

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

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

这不是C#,去除标签。你可能是指C,但我不能读你的想法。 – leppie

+0

@leppie是的,我错了,对不起 –

回答

0

我发现这个解决方案:

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

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

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