1

我正在使用ANTRL,這是我的一些語法給我的錯誤。幫助... LL語法和遞歸下降解析器

statement 
:  (name)(
    | BECOMES expression 
    | LPAREN (expression (COMMA expression)*)? RPAREN 
    | SHIFTLEFT name LPAREN (expression (COMMA expression)*)? RPAREN 
    ) 
    | OUTPUT LPAREN expression (COMMA expression)* RPAREN 
    | IF expression THEN statement (ELSE statement)? 
    | FOR name BECOMES expression TO expression DO statement 
    | REPEAT statement UNTIL expression 
    | WHILE expression DO statement 
    | body 
    | 
; 

這是錯誤「決定可以匹配輸入諸如‘ELSE’使用多個替代」。

我該如何解決?

回答

0

嘗試使用backtrack option

options { 
    backtrack = true; 
} 

說明

的新功能(一個大的),是語法, 規則,塊 回溯= true選項,可以讓你在 輸入任何舊垃圾和ANTLR如果無法弄清楚你的意思,將會回溯 。 在 分析中,antlr沒有報告錯誤。它僅在靜態語法LL * 分析失敗時隱含地在每個生產前添加一個syn pred, 。 Syn pred編碼不是 ,如果pred在 決定中未使用,則生成該編號。這本質上是一個快速原型模式。這是我在java.g.上使用的 。噢, 現在不會自動記憶部分解析(即規則 解析結果),現在自動回溯 。你還必須說 memoize = true。可以讓一個巨大的 區別開啓。

+0

回溯怎麼辦? – 2010-07-29 18:42:30

+0

@Atom - 我可以假設你的意思是「回溯做什麼?」? – ChaosPandion 2010-07-29 18:47:19

+0

是的,我的英語不好。 – 2010-07-29 19:03:54