0

我试图获得 antlr3 的感觉,并将表达式评估器粘贴到 ANTLRWorks 窗口(最新版本)并编译它。编译成功并启动,但有两个问题:

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

由于我是antlr的新手,有人可以帮忙吗?

4

2 回答 2

1

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

expr returns [int value]
    :   e=multExpr {$value = $e.value;}
        (   '+' e=multExpr {$value += $e.value;}
        |   '-' e=multExpr {$value -= $e.value;}
        )*
于 2009-12-08T00:34:45.153 回答
1

我们经常得到

MissingTokenException(0!=0)

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

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

于 2009-12-08T00:45:41.933 回答