ANTLR4 中期望的外来输入“-" [英] Extraneous input '-' expecting in ANTLR4

查看:26
本文介绍了ANTLR4 中期望的外来输入“-"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你能告诉我可能是什么问题吗?期望 {, '(', NUMBER, VARIABLE},但如果我在 - 之后插入此规则,则会出现相同的错误.

Could you please tell me what could be the problem? It's expect {<EOF>, '(', NUMBER, VARIABLE}, but if i insert this rules after -, i got same error.

grammar Grammar;

@header {
    package parser;
}

program: line* EOF ;
line: (expression | assignment) ('\n' | EOF);
assignment : VARIABLE '=' expression ;
expression : '(' expression ')'        #parenthesisExpression
           | left=expression OP1 right=expression #firstPriorityExpression
           | left=expression OP2 right=expression #secondPriorityExpression
           | number=NUMBER                    #numericExpression
           | variable=VARIABLE                  #variableExpression
           ;

NUMBER : '-'? [0-9]+ ;
VARIABLE : [a-zA-Z][a-zA-Z0-9]* ;
OP1: '*' | '/' ;
OP2: '+' | '-' ;
WHITESPACE : (' ' | '\t' | '\n')+ -> skip ;

推荐答案

NUMBER 规则中移除 -,并引入 #unaryExpression> 在您的 expression 规则中.

Remove the - from the NUMBER rule, and introduce an #unaryExpression in your expression rule.

应该这样做:

expression
 : '(' expression ')'                   #parenthesisExpression
 | MIN expression                       #unaryExpression
 | left=expression op1 right=expression #firstPriorityExpression
 | left=expression op2 right=expression #secondPriorityExpression
 | number=NUMBER                        #numericExpression
 | variable=VARIABLE                    #variableExpression
 ;

op1
 : MUL
 | DIV
 ;

op2
 : ADD
 | MIN
 ;

NUMBER     : [0-9]+ ;
VARIABLE   : [a-zA-Z][a-zA-Z0-9]* ;
MUL        : '*' ;
DIV        : '/' ;
ADD        : '+' ;
MIN        : '-' ;
WHITESPACE : [ \t\r\n]+ -> skip ;

这篇关于ANTLR4 中期望的外来输入“-"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆