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);
        }