我试图获得 antlr3 的感觉,并将表达式评估器粘贴到 ANTLRWorks 窗口(最新版本)并编译它。编译成功并启动,但有两个问题:
- 尝试使用 的输入
1+2*4/3;
导致解析器的实际输入为1+2*43
. - 它在其图形解析器树中显示的错误之一是
MissingTokenException(0!=0)
.
由于我是antlr的新手,有人可以帮忙吗?
您链接到的示例不支持除法(只需查看代码,您会发现这里没有除法:
expr returns [int value]
: e=multExpr {$value = $e.value;}
( '+' e=multExpr {$value += $e.value;}
| '-' e=multExpr {$value -= $e.value;}
)*
我们经常得到
MissingTokenException(0!=0)
当我们犯错时。我认为这意味着它找不到它正在寻找的令牌,并且可能由不正确的令牌产生。解析器有时可能会根据语法“恢复”。
还要记住,LEXER 在解析器之前运行,您应该检查实际传递给解析器的标记。AntlrWorks 调试器在这里非常有用。