小编use*_*093的帖子

相互左递归ANTLR 4

我很遗憾再问一个关于相互左递归的问题,我觉得我的情况是独一无二的,或者至少我无法弄清楚它是否与其他人的语法联系起来.我对comp sci世界有点新鲜(我在java中自学,这是我的目标语言,现在是ANTLR4)所以如果可能的话请用layperson术语描述,而不是CS主要术语.

我正在编写一个需要代数和符号衍生物的程序,当然这需要对事物进行解析,然后对树进行操作,但我甚至不会担心这一点,因为我认为ANTLR4支持直接左递归,但是显然它不是以某种方式.在输出中,它一直告诉我,我的方法[表达式]是相互遗留的,显然是不允许的......?我的问题:

1)有人可以解释左递归/相互和直接左递归之间的区别,如果有的话?

2)解释我的语法中是什么导致了这种递归烦恼,以及如何解决它?而且我不确定这是否是主题:

3)人们说关于替代品和标签替代品的事情(我认为他们的意思是#label符号).那个有什么用?

grammar MathProcessor;
@header {package utils;}
END: ';';
EQUALS: '=';
SIN: 'sin(';
COS: 'cos(';
TAN: 'tan(';
SEC: 'sec(';
CSC: 'csc(';
COT: 'cot(';
LN: 'ln(';
EPOW: 'pow(';
RPAREN: '(';
LPAREN: ')';
EXP: '^';
MULT: '*';
DIV: '/';
ADD: '+';
SUBT: '-';
VAR: ('a'..'z'|'A'..'Z');
INT: ('0'..'9')+;
mathobj: ((equation|expression) END) EOF;
equation: (expression '=' expression);

expression: 
((RPAREN|SIN|COS|TAN|SEC|CSC|COT|LN|EPOW) expression (RPAREN)) #parenOps
| (expression EXP expression) #exponent
| (expression (MULT|DIV) expression) #multiplyDivide 
| (expression (ADD|SUBT) expression) #addSubtract
| (VAR|INT) #varInt …
Run Code Online (Sandbox Code Playgroud)

java left-recursion antlr4

2
推荐指数
1
解决办法
762
查看次数

标签 统计

antlr4 ×1

java ×1

left-recursion ×1