首页 文章

在ANTLR4期望的无关输入'-'

提问于
浏览
1

你能告诉我可能是什么问题吗?它期待 {<EOF>, '(', NUMBER, VARIABLE} ,但如果我在 - 之后插入此规则,我得到了同样的错误 .

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 ;

1 回答

  • 0

    NUMBER 规则中删除 - ,并在 expression 规则中引入 #unaryExpression .

    这样的事情应该这样做:

    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 ;
    

相关问题