Приоритет операций калькулятора ANTLR
Здравствуйте, я бы сделал простой пример калькулятора с помощью ANTLR, но есть проблема в приоритете операций (/,*,-,+) мой код дает им тот же приоритет ,мне нужно сделать высший приоритет для умножения и деления
это грамматика:
grammar Calc; start : expr EOF; expr: expr op expr # binaryOp | Num # num ; op : '+' | '-' | '/' | '*' ; Num : [0-9]+;
а это и есть java код:
import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.*; public class Calc{ public static void main(String args[])throws Exception{ ANTLRFileStream str = new ANTLRFileStream(args[0]); CalcLexer lex = new CalcLexer(str); CommonTokenStream tok = new CommonTokenStream(lex); CalcParser parser = new CalcParser(tok); ParseTree tree = parser.start(); System.out.println(new MyVisitor().visit(tree)); } } class MyVisitor extends CalcBaseVisitor<Integer>{ @Override public Integer visitStart(CalcParser.StartContext ctx) { return visit(ctx.expr()); } @Override public Integer visitBinaryOp(CalcParser.BinaryOpContext ctx) { int lhs = visit(ctx.expr(0)); int rhs = visit(ctx.expr(1)); String op = ctx.op().getText(); int res = 0; if (op.equals("+")){ res = lhs + rhs; }else if (op.equals("-")){ res = lhs - rhs; }else if (op.equals("/")){ res = lhs / rhs; }else if (op.equals("*")){ res = lhs * rhs; } return res; } @Override public Integer visitNum(CalcParser.NumContext ctx) { return Integer.parseInt(ctx.Num().getText()); } }
Что я уже пробовал:
я попытался изменить код, потому что мне нужна та же грамматика