Esempio n. 1
0
 private static void ResolveWhitespace(LexerContext context)
 {
     while (!context.IsEnded() && (context.GetCurrentChar().Equals(' ') || ResolveNewLine(context)))
     {
         context.IncIndex();
     }
 }
Esempio n. 2
0
        private static void ResolveControlString(LexerContext context, StringBuilder builder)
        {
            context.IncIndex();

            var numberBuilder = new StringBuilder();

            while (!context.IsEnded() && Char.IsDigit(context.GetCurrentChar()))
            {
                numberBuilder.Append(context.GetCurrentChar());
                context.IncIndex();
            }

            var num = Int32.Parse(numberBuilder.ToString());

            builder.Append((char)num);
        }
Esempio n. 3
0
        private static IdentifierToken ResolveIdentifier(LexerContext context)
        {
            var builder = new StringBuilder();
            var begin   = context.GetIndex();

            builder.Append(context.GetCurrentChar());
            context.IncIndex();
            while (!context.IsEnded() &&
                   (Char.IsDigit(context.GetCurrentChar()) ||
                    Char.IsLetter(context.GetCurrentChar())))
            {
                builder.Append(context.GetCurrentChar());
                context.IncIndex();
            }

            return(new IdentifierToken(builder.ToString(), begin, context.GetIndex()));
        }
Esempio n. 4
0
        private static NumberToken ResolveNumber(LexerContext context)
        {
            var begin   = context.GetIndex();
            var builder = new StringBuilder();

            if (NumberToken.IsDecimalNumberBegin(context))
            {
                while (!context.IsEnded() && NumberToken.IsDecimalDigit(context))
                {
                    builder.Append(context.GetCurrentChar());
                    context.IncIndex();
                }
            }
            else if (NumberToken.IsHexNumberBegin(context))
            {
                context.IncIndex();
                while (!context.IsEnded() && NumberToken.IsHexadecimalDigit(context))
                {
                    builder.Append(context.GetCurrentChar());
                    context.IncIndex();
                }
            }
            else if (NumberToken.IsOctalNumberBegin(context))
            {
                context.IncIndex();
                while (!context.IsEnded() && NumberToken.IsOctalDigit(context))
                {
                    builder.Append(context.GetCurrentChar());
                    context.IncIndex();
                }
            }
            else
            {
                context.IncIndex();
                while (!context.IsEnded() && NumberToken.IsBinaryDigit(context))
                {
                    builder.Append(context.GetCurrentChar());
                    context.IncIndex();
                }
            }

            return(new NumberToken(builder.ToString(), begin, context.GetIndex()));
        }
Esempio n. 5
0
        private static void ResolveQuotedString(LexerContext context, StringBuilder builder)
        {
            context.IncIndex();

            while (!context.IsEnded() && StringToken.IsStringSymbol(context.GetCurrentChar()))
            {
                if (context.GetCurrentChar().Equals('\''))
                {
                    if (StringToken.IsDoubleQuote(context))
                    {
                        builder.Append('\'');
                        context.IncIndex();
                        context.IncIndex();
                    }
                    else
                    {
                        context.IncIndex();
                        return;
                    }
                }
                builder.Append(context.GetCurrentChar());
                context.IncIndex();
            }
        }
Esempio n. 6
0
        private static SpecialSymbolToken ResolveSpecial(LexerContext context)
        {
            var begin = context.GetIndex();

            if (!context.IsLast() && SpecialSymbolToken.IsSpecialPair(context))
            {
                var pair = context.GetCharPair();
                context.IncIndex();
                context.IncIndex();
                return(new SpecialSymbolToken(pair, begin));
            }
            else
            {
                var ch = context.GetCurrentChar();
                context.IncIndex();
                return(new SpecialSymbolToken(ch, begin));
            }
        }
Esempio n. 7
0
        private static StringToken ResolveString(LexerContext context)
        {
            var begin   = context.GetIndex();
            var builder = new StringBuilder();

            while (StringToken.IsStringBegin(context))
            {
                if (context.GetCurrentChar().Equals('\''))
                {
                    ResolveQuotedString(context, builder);
                }
                else
                {
                    ResolveControlString(context, builder);
                }
            }

            return(new StringToken(builder.ToString(), begin, context.GetIndex()));
        }