2016-12-31 101 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 
      ;