帮助... LL语法和递归下降解析器

时间:2010-07-29 18:31:33

标签: compiler-construction antlr grammar context-free-grammar recursive-descent

我正在使用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“”。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

尝试使用backtrack option

options {
    backtrack = true;
}

<强>描述

  

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