我有一个简单的ANLTR语法和随附的访问者.除非输入无效,否则一切都很好.如果输入无效,则吞下错误并且我的计算器输出错误.
我已经尝试实现一个错误监听器,而不是Recover使用词法分析器的方法,而且......好吧......今天还有其他几十件事情.有人可以告诉我如何简单地抛出错误而不是吞下坏的"令牌"吗?(我使用引号,因为它们根本不是令牌.我的语法中的字符未定义.)
有效输入:
1 + 2*3 - 4
输入无效:
1 + 2 + 3(4)
ArgumentException如果解析器/词法分析器遇到括号(或任何其他未定义的字符),我想抛出一个.目前,无效字符似乎只是消失在以太中,解析器就像没有错一样.
如果我使用grun命令在控制台中运行它,我会得到以下输出,因此它会在某个级别识别无效的标记.
第1:9行令牌识别错误:'('
第1:11行令牌识别错误:')'
这个结果解析树.

BasicMath.g4
grammar BasicMath;
/*
* Parser Rules
*/
compileUnit : expression+ EOF;
expression :
expression MULTIPLY expression #Multiplication
| expression DIVIDE expression #Division
| expression ADD expression #Addition
| expression SUBTRACT expression #Subtraction
| NUMBER #Number
;
/*
* Lexer Rules
*/
NUMBER : INT; //Leave room to extend what kind of math we …Run Code Online (Sandbox Code Playgroud)