我正在尝试感受antlr3,并将Expression evaluator粘贴到ANTLRWorks窗口(最新版本)并进行编译。它成功编译并开始,但有两个问题:
1+2*4/3;
的输入导致解析器的实际输入为1+2*43
。 MissingTokenException(0!=0)
。因为我是antlr的新手,有人可以帮忙吗?
答案 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调试器在这里非常有用。