public override Expression VisitUnary_expression(Unary_expressionContext context) { if (context.primary_expression() != null) { return(Visit(context.primary_expression())); } var expression = Visit(context.unary_expression()); if (context.type() != null) { var type = _parserContext.GetType(context.type().GetText()); return(Expression.Convert(expression, type)); } var op = context.children[0].GetText(); if (op == "!" || op == "~") { expression = Expression.Not(expression); } else if (op == "+") { //Keep the expression } else if (op == "-") { expression = Expression.Negate(expression); } else { throw new CompilationException($"Unsupported operation. Operation={op}", context); } return(expression); }