我在antlr3中尝试了以下语法:
ifstmt : IF '(' relation ')' (stmt|block)
(ELSEIF '(' relation')' (stmt|block))*
(ELSE (stmt|block))?
;
但它不接受其他部分说: “如果没有预期的话”:
if(a>b) stat; else if(a<b) stat; else stat;
在用antlrworks解释语法时,它说:
rule ifstmt has non-LL(*) decision due to recursive rule invocations reachable
from alts 1,2. Resolve by left-factoring or using syntactic predicates or using backtrack=true option.
如果有人能为if-elseif-else声明提出可接受的语法,那就太棒了。