Antlr4 使用错误的输入字符串运行TestRig不会发出错误消息
我做了一个语法,它构造了表达式之间的比较,如下所示Antlr4 使用错误的输入字符串运行TestRig不会发出错误消息,antlr4,Antlr4,我做了一个语法,它构造了表达式之间的比较,如下所示 grammar EtlExpression; /** The start rule; begin parsing here. */ prog : comp ; comp : expr ('='|'<='|'>='|'<'|'>') expr ; expr : expr ('*'|'/') expr | expr ('+'|'-') expr | '(' expr
grammar EtlExpression;
/** The start rule; begin parsing here. */
prog : comp ;
comp : expr ('='|'<='|'>='|'<'|'>') expr ;
expr : expr ('*'|'/') expr
| expr ('+'|'-') expr
| '(' expr ')'
| func
| ID
| STR
| NUM
;
func : ID '(' expr (',' expr)* ')' ; // function
STR : '"' ('\\"'|.)*? '"' ; // match identifiers
ID : LETTER (LETTER|DIGIT)* ; // match identifiers
NUM : '-'? ('.' DIGIT+ | DIGIT+ ('.' DIGIT*)? ) ; // match number
WS : [ \t\r\n]+ -> skip ; // toss out whitespace
fragment
LETTER : [a-zA-Z] ;
fragment
DIGIT : [0-9] ;
语法表达;
/**启动规则;从这里开始解析*/
程序:comp;
comp:expr(“=”|“=”|“)expr;
expr:expr(“*”|“/”)expr
|expr('+'|'-')expr
|“('expr')”
|func
|身份证
|STR
|NUM
;
func:ID'('expr(','expr)*');//作用
STR:“”(“\\”“\;)*?”“;//匹配标识符
ID:字母(字母|数字)*;//匹配标识符
NUM:'-'?('.'数字+|数字+('.'数字*)?);//匹配号
WS:[\t\r\n]+->skip;//去掉空格
片段
信:[a-zA-Z];
片段
数字:[0-9];
然后我在编译之后运行testRig。
结果如下
java -cp .;C:\App\Antlr4\antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig test.antlr.EtlExpression prog -tree
a < b = c
^Z
(prog (comp (expr a) < (expr b)))
java-cp;C:\App\Antlr4\antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig test.antlr.etl表达式程序树
a
comp规则只指定一个比较操作数,我认为这个测试输入字符串应该发出某种错误,比如“第1:6行:'='处的令牌识别错误”,但它只是忽略了“=c”部分
你能帮我语法有什么问题吗?或者我怎样才能得到正确的信息?
提前感谢。当解析器无法匹配
=
及其以外的内容时,解析器将停止运行。如果您强制解析器使用整个输入,则标准输出上将出现错误。您可以通过将EOF
添加到程序
规则:
prog : comp EOF;