Exemplo n.º 1
0
        private static bool DoString(ref StateContext context, int position)
        {
            if (context.Flags.IsEscaping())
            {
                context.Accept(Escape(context.Character));
                context.Flags.IsEscaping(false);
            }
            else
            {
                if (context.Character == '\\')
                {
                    context.Flags.IsEscaping(true);
                }
                else if (context.Character == context.Flags.GetStringQuote())
                {
                    context.State = State.Parameter;
                    context.AppendParameterConstant(context.Stack.Peek());
                }
                else
                {
                    context.Accept();
                }
            }

            return(true);
        }
Exemplo n.º 2
0
        private static bool DoNumber(ref StateContext context, int position)
        {
            switch (context.Character)
            {
            case ',':
                var ownerState = context.GetOwnerState();

                if (ownerState != State.Indexer && ownerState != State.Method)
                {
                    context.OnError(EXCEPTION_UNKNOWN_MESSAGE);
                    return(false);
                }

                context.State = ownerState;
                context.AppendParameterConstant(context.Stack.Peek());

                break;

            case ']':
                if (context.GetOwnerState() != State.Indexer)
                {
                    context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position));
                    return(false);
                }

                context.AppendParameterConstant(context.Stack.Pop());
                context.ResetState();

                break;

            case ')':
                if (context.GetOwnerState() != State.Method)
                {
                    context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position));
                    return(false);
                }

                context.AppendParameterConstant(context.Stack.Pop());
                context.ResetState();

                break;

            case '.':
                var numberType = context.Flags.GetConstantType();

                if (numberType == TypeCode.Double || numberType == TypeCode.Single || numberType == TypeCode.Decimal)
                {
                    context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position));
                    return(false);
                }

                context.Flags.SetConstantType(TypeCode.Double);
                context.Accept();

                break;

            case 'L':
                context.State = State.Parameter;
                context.Flags.SetConstantType(TypeCode.Int64);
                context.AppendParameterConstant(context.Stack.Peek());

                break;

            case 'f':
            case 'F':
                context.State = State.Parameter;
                context.Flags.SetConstantType(TypeCode.Single);
                context.AppendParameterConstant(context.Stack.Peek());

                break;

            case 'm':
            case 'M':
                context.State = State.Parameter;
                context.Flags.SetConstantType(TypeCode.Decimal);
                context.AppendParameterConstant(context.Stack.Peek());

                break;

            default:
                if (context.Character >= '0' && context.Character <= '9')
                {
                    context.Accept();
                }
                else if (context.IsWhitespace())
                {
                    context.State = State.Parameter;
                    context.AppendParameterConstant(context.Stack.Peek());
                }
                else
                {
                    context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position));
                    return(false);
                }

                break;
            }

            return(true);
        }