public override IExpressionNode VisitTextConcatination(QLGrammarParser.TextConcatinationContext context)
        {
            if (context.TERMINAL != null)
            {
                return(GetTerminal(context));
            }

            IExpressionNode left  = GetTerminal(context);
            IExpressionNode right = VisitTextConcatination(context.textConcatination());

            return(new TextConcatinationNode(Location.FromContext(context), left, right, NodeType.TextConcatination));
        }
        private IExpressionNode GetTerminal(QLGrammarParser.TextConcatinationContext context)
        {
            Location location = Location.FromContext(context);

            if (context.ID() != null)
            {
                return(new IdentifierNode(location, context.ID().GetText()));
            }
            else if (context.TEXT() != null)
            {
                return(new LiteralNode(location, Util.RemoveQuotes(context.TEXT().GetText()), QValueType.Text));
            }

            throw new NotImplementedException("We shouldn't be able to reach this line of code! Everything should be handled by the statements above");
        }