package org.tax.parser; import java.util.Map; import org.tax.datatypes.QLBoolean; import org.tax.datatypes.QLDecimal; import org.tax.datatypes.QLNumber; import org.tax.datatypes.QLType; import org.tax.expression.BooleanBinOpExpr; import org.tax.expression.BooleanCompExpr; import org.tax.expression.BooleanUniOpExpr; import org.tax.expression.BooleanValueExpr; import org.tax.expression.DecimalValueExpr; import org.tax.expression.Expression; import org.tax.expression.IntValueExpr; import org.tax.expression.MoneyValueExpr; import org.tax.expression.NumberOptExpr; import org.tax.exprgen.ExprBaseVisitor; import org.tax.exprgen.ExprParser; public class ExprManVisitor extends ExprBaseVisitor<Expression<? extends QLType>> { Map<String, Variable> memory; // Class<? extends Expression<? extends FormType>> clazz; String className; public ExprManVisitor(Map<String, Variable> memory, String className) { super(); this.memory = memory; this.className = className; } @Override public Expression<? extends QLNumber<? extends Number>> visitINTLiteral(ExprParser.INTLiteralContext ctx) { System.out.println(ctx.getText()); if (className.equals("money")) return new MoneyValueExpr(Double.valueOf(ctx.getText())); if (className.equals("decimal")) return new DecimalValueExpr(Double.valueOf(ctx.getText())); if (className.equals("integer")) return new IntValueExpr(Integer.valueOf(ctx.getText())); return null; } @Override public Expression<? extends QLDecimal> visitDECIMALLiteral(ExprParser.DECIMALLiteralContext ctx) { if (className.equals("decimal")) return new DecimalValueExpr(Double.valueOf(ctx.getText())); if (className.equals("money")) return new MoneyValueExpr(Double.valueOf(ctx.getText())); return null; } @Override public Expression<? extends QLType> visitVarLiteral(ExprParser.VarLiteralContext ctx) { String type = memory.get(ctx.getText()).type; String value = memory.get(ctx.getText()).value; System.out.println("and here is the type from variable" + type + " : " + value); if (type.equals("integer")) return new IntValueExpr(Integer.valueOf(value)); else if (type.equals("boolean")) return new BooleanValueExpr(Boolean.valueOf(value)); else if(type.equals("money")) return new MoneyValueExpr(Double.valueOf(value)); return null; } @Override public Expression<QLBoolean> visitBOOLLiteral(ExprParser.BOOLLiteralContext ctx) { return new BooleanValueExpr(Boolean.valueOf(ctx.getText())); } @Override public Expression<QLBoolean> visitANDExpr(ExprParser.ANDExprContext ctx) { @SuppressWarnings("unchecked") Expression<QLBoolean> left = (Expression<QLBoolean>) visit(ctx.expression(0)); @SuppressWarnings("unchecked") Expression<QLBoolean> right = (Expression<QLBoolean>)(visit(ctx.expression(1))); return new BooleanBinOpExpr(left, right, ctx.op.getText()); } @Override public Expression<QLBoolean> visitORExpr(ExprParser.ORExprContext ctx) { @SuppressWarnings("unchecked") Expression<QLBoolean> left = (Expression<QLBoolean>) visit(ctx.expression(0)); @SuppressWarnings("unchecked") Expression<QLBoolean> right = (Expression<QLBoolean>)(visit(ctx.expression(1))); return new BooleanBinOpExpr(left, right, ctx.op.getText()); } @Override public Expression<? extends QLNumber<? extends Number>> visitADDSUBExpr(ExprParser.ADDSUBExprContext ctx) { @SuppressWarnings("unchecked") Expression<QLNumber<? extends Number>> left = (Expression<QLNumber<? extends Number>>)(visit(ctx.expression(0))); @SuppressWarnings("unchecked") Expression<QLNumber<? extends Number>> right = (Expression<QLNumber<? extends Number>>)(visit(ctx.expression(1))); return new NumberOptExpr(left, right, ctx.op.getText()); } @SuppressWarnings("rawtypes") @Override public Expression visitPARExpr(ExprParser.PARExprContext ctx) { return visit(ctx.expression()); } @Override public Expression<QLBoolean> visitBANGExpr(ExprParser.BANGExprContext ctx) { @SuppressWarnings("unchecked") Expression<QLBoolean> operand = (Expression<QLBoolean>)(visit(ctx.expression())); return new BooleanUniOpExpr(operand, ctx.op.getText()); } @Override public Expression<QLBoolean> visitCOMPExpr(ExprParser.COMPExprContext ctx) { @SuppressWarnings("unchecked") Expression<QLNumber<Number>> left = (Expression<QLNumber<Number>>)(visit(ctx.expression(0))); @SuppressWarnings("unchecked") Expression<QLNumber<Number>> right = (Expression<QLNumber<Number>>)(visit(ctx.expression(1))); return new BooleanCompExpr(left, right, ctx.op.getText()); } // @Override public Expression<TInteger> visitMULDIVExpr(ExprParser.MULDIVExprContext ctx) { // System.out.println("MULDIVVVV"); // @SuppressWarnings("unchecked") // Expression<TInteger> left = (Expression<TInteger>)(visit(ctx.expression(0))); // @SuppressWarnings("unchecked") // Expression<TInteger> right = (Expression<TInteger>)(visit(ctx.expression(1))); // return new IntOpExpr(left, right, ctx.op.getText()); // } @Override public Expression<? extends QLNumber<? extends Number>> visitMULDIVExpr(ExprParser.MULDIVExprContext ctx) { @SuppressWarnings("unchecked") Expression<QLNumber<? extends Number>> left = (Expression<QLNumber<? extends Number>>)(visit(ctx.expression(0))); @SuppressWarnings("unchecked") Expression<QLNumber<? extends Number>> right = (Expression<QLNumber<? extends Number>>)(visit(ctx.expression(1))); return new NumberOptExpr(left, right, ctx.op.getText()); } }