Calculator.g4
grammar calculator;
expression: atom ((PLUS | MINUS) atom)*;
atom: '1';
PLUS: '+';
MINUS: '-';
WS: [ \r\n\t]+ -> skip;有例子解释如何解析模式atom ((PLUS | MINUS) atom)*吗?
我搜索了很多博客,教我如何解析访问者和听者模型中的简单语法。但是,它们中没有一个展示了如何像atom ((PLUS | MINUS) atom)*那样解析模式。
我感到困惑的是,正/负是不同的,我可以用AllAtom方法对原子进行量程,但是没有方法可以得到相关的正负。应该有一个加/减的列表,它们可能彼此不一样。
发布于 2022-09-13 00:05:28
你可以通过稍微重写语法来完成它。我把正负提取成一个单独的规则。
grammar Calculator;
expression: atom (sign atom)*;
sign: PLUS | MINUS;
atom: '1';
PLUS: '+';
MINUS: '-';
WS: [ \r\n\t]+ -> skip;下面是相应的侦听器:
public class Calculator extends CalculatorBaseListener {
private int accum;
private char sign;
@Override
public void enterAtom(CalculatorParser.AtomContext ctx) {
int value = Integer.parseInt(ctx.getText());
switch (sign) {
case '\0':
accum = value;
break;
case '+':
accum += value;
break;
case '-':
accum -= value;
break;
}
}
@Override
public void enterSign(CalculatorParser.SignContext ctx) {
sign = ctx.getText().charAt(0);
}
@Override
public void exitExpression(CalculatorParser.ExpressionContext ctx) {
System.out.println(accum);
}
}https://stackoverflow.com/questions/73692733
复制相似问题