### Question:
SqlCalculationExpressionParser implements CalculationExpressionParser<String> { @Override public String eval(String expression, CalculationContext context) { try { CalculationContext.setCurrentContext(context); DatumExpressionLexer lexer = new DatumExpressionLexer(CharStreams.fromString(expression)); lexer.removeErrorListeners(); lexer.addErrorListener(listener); CommonTokenStream tokens = new CommonTokenStream(lexer); DatumExpressionParser parser = new DatumExpressionParser(tokens); parser.removeErrorListeners(); parser.addErrorListener(listener); return parser.calculations().accept(new DatumExpressionVisitor()); } finally { CalculationContext.removeCurrentContext(); } }  @Override String eval(String expression, CalculationContext context); void setListener(ErrorListener listener);  }### Answer:
@Test public void testEval() { Assert.assertEquals(calculationExpressionParser.eval("2+2;", null), "2 + 2"); Assert.assertEquals(calculationExpressionParser.eval("[TABLE.FIELD1]+2;", null), "TABLE.FIELD1 + 2"); Assert.assertEquals(calculationExpressionParser.eval("#2018-03-02#;", null), "'2018-03-02'"); Assert.assertEquals(calculationExpressionParser.eval("NATIVE('ABS',-55)-22;", null), "ABS ( - 55 ) - 22"); }