Ejemplo n.º 1
0
 public override void ExitString_value_inline(MalinaParser.String_value_inlineContext context)
 {
     base.ExitString_value_inline(context);
     SendInterpolationAliasesAndParametersToNameresolver();
 }
Ejemplo n.º 2
0
        public override void ExitString_value_inline([NotNull] MalinaParser.String_value_inlineContext context)
        {
            var parent = (IValueNode)_nodeStack.Peek();

            var dqs = context.DQS();

            if (dqs != null)
            {
                parent.ValueInterval = new Interval(((CommonToken)dqs.Payload).StartIndex + 1, ((CommonToken)dqs.Payload).StopIndex - 1);
                ((DOM.IValueNode)parent).ValueType = ValueType.DoubleQuotedString;
                return;
            }

            var openValue = context.OPEN_STRING();

            if (openValue != null)
            {
                parent.ValueInterval = new Interval(((CommonToken)openValue.Payload).StartIndex, ((CommonToken)openValue.Payload).StopIndex);
                ((DOM.IValueNode)parent).ValueType = ValueType.OpenString;
                return;
            }

            var freeOpenValue = context.FREE_OPEN_STRING();

            if (freeOpenValue != null)
            {
                parent.ValueInterval = new Interval(((CommonToken)freeOpenValue.Payload).StartIndex, ((CommonToken)freeOpenValue.Payload).StopIndex);
                ((DOM.IValueNode)parent).ValueType = ValueType.FreeOpenString;
                return;
            }

            var jsonBoolean = context.JSON_BOOLEAN();

            if (jsonBoolean != null)
            {
                parent.ValueInterval = new Interval(((CommonToken)jsonBoolean.Payload).StartIndex, ((CommonToken)jsonBoolean.Payload).StopIndex);
                ((DOM.IValueNode)parent).ValueType = ValueType.Boolean;
                return;
            }

            var jsonNull = context.JSON_NULL();

            if (jsonNull != null)
            {
                parent.ValueInterval = new Interval(((CommonToken)jsonNull.Payload).StartIndex, ((CommonToken)jsonNull.Payload).StopIndex);
                ((DOM.IValueNode)parent).ValueType = ValueType.Null;
                return;
            }

            var jsonNumber = context.JSON_NUMBER();

            if (jsonNumber != null)
            {
                parent.ValueInterval = new Interval(((CommonToken)jsonNumber.Payload).StartIndex, ((CommonToken)jsonNumber.Payload).StopIndex);
                ((DOM.IValueNode)parent).ValueType = ValueType.Number;
                return;
            }

            var sqs = context.sqs_inline();

            if (sqs != null)
            {
                SetInterpolationItems(parent, sqs.children);

                //Set ValueInterval
                var stopIndex = ((CommonToken)sqs.Stop).Type == MalinaLexer.SQS_END ? ((CommonToken)sqs.Stop).StopIndex - 1 : ((CommonToken)sqs.Stop).StopIndex;
                parent.ValueInterval = new Interval(((CommonToken)sqs.Start).StartIndex + 1, stopIndex);

                //Set Indent
                parent.ValueIndent = ((MalinaToken)sqs.children[0].Payload).TokenIndent;

                //Set Value type to SingleQuotedString
                ((DOM.IValueNode)parent).ValueType = ValueType.SingleQuotedString;
            }

            var jsonLiteral = context.sqs_json_literal();

            if (jsonLiteral != null)
            {
                //Set ValueInterval
                var stopIndex = ((CommonToken)jsonLiteral.Stop).Type == MalinaLexer.SQS_END ? ((CommonToken)jsonLiteral.Stop).StopIndex - 1 : ((CommonToken)jsonLiteral.Stop).StopIndex;
                parent.ValueInterval = new Interval(((CommonToken)jsonLiteral.Start).StartIndex + 1, stopIndex);
                var literalToken = (CommonToken)jsonLiteral.children[1].Payload;
                switch (literalToken.Type)
                {
                case MalinaLexer.SQS_JSON_BOOLEAN:
                    ((DOM.IValueNode)parent).ValueType = ValueType.Boolean;
                    break;

                case MalinaLexer.SQS_JSON_NULL:
                    ((DOM.IValueNode)parent).ValueType = ValueType.Null;
                    break;

                case MalinaLexer.SQS_JSON_NUMBER:
                    ((DOM.IValueNode)parent).ValueType = ValueType.Number;
                    break;
                }
            }
        }