我正在使用ANTRL,这是我的一些语法,它给我带来了错误。
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 :(得分:0)
尝试使用backtrack option。
options {
backtrack = true;
}
<强>描述强>
新功能(一个大功能)就是 backtrack =语法的真实选项, 规则和允许您输入的块 任何旧垃圾和ANTLR都会回溯 如果它无法弄清楚你的意思。 antlr期间没有报告错误 分析。它隐含地添加了一个syn 在每个生产面前, 仅在静态语法LL *时使用它们 分析失败。 Syn pred代码不是 如果未使用pred,则生成 决策。这基本上是一个快速的 原型模式。这就是我所拥有的 用于java.g.哦,它没有 记住部分解析(即规则 在回溯过程中解析结果 现在自动。你也必须说 memoize的=真。可以赚大钱 差异打开。