antlr - ANTLR4 中预期的无关输入“-”
问题描述
你能告诉我可能是什么问题吗?这是预期的{<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 ;
解决方案
-
从规则中删除,并在您的规则中NUMBER
引入一个。#unaryExpression
expression
这样的事情应该这样做:
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 ;
推荐阅读
- css - WordPress 购物者标题很难
- javascript - 无法使用 webpack 缩小 css 代码
- python - 清除日志文件Python的内容不起作用
- python - Tkinter:制作一个包含在类中的按钮面板
- javascript - Javascript中多个父母的一个子窗口
- javascript - 谷歌地图回调函数中未定义的Jquery
- aurelia - 如何在 Aurelia 中将一个变量调用为另一个变量?
- reactjs - 删除FormItem中的AutoComplete'选项后,如何清除带有已删除值的输入?
- objective-c - 如何将此扩展 func swift 转换为目标 c
- java - 如何将用户生成的 editText 字段保存到 Firebase?