ANTLR4中预期有多余的输入“-" [英] Extraneous input '-' expecting in ANTLR4
本文介绍了ANTLR4中预期有多余的输入“-"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
能否请您告诉我可能是什么问题?期望{<EOF>, '(', 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
规则中删除-
,并在expression
规则中引入#unaryExpression
.
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屋!
查看全文