尝试样本语法时解析器的奇怪行为

时间:2009-12-08 00:32:31

标签: antlr3

我正在尝试感受antlr3,并将Expression evaluator粘贴到ANTLRWorks窗口(最新版本)并进行编译。它成功编译并开始,但有两个问题:

  • 尝试使用1+2*4/3;的输入导致解析器的实际输入为1+2*43
  • 它在图形解析器树中显示的错误之一是MissingTokenException(0!=0)

因为我是antlr的新手,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您链接到的示例不支持除法(只需查看代码,您会发现此处没有划分:

expr returns [int value]
    :   e=multExpr {$value = $e.value;}
        (   '+' e=multExpr {$value += $e.value;}
        |   '-' e=multExpr {$value -= $e.value;}
        )*

答案 1 :(得分:1)

我们经常得到

MissingTokenException(0!=0)

当我们犯错时。我认为这意味着它无法找到它正在寻找的令牌,并且可能由不正确的令牌产生。解析器有时可能会根据语法“恢复”。

还要记住,LEXER在解析器之前运行,你应该检查实际传递给解析器的令牌。 AntlrWorks调试器在这里非常有用。