private static void ResolveWhitespace(LexerContext context) { while (!context.IsEnded() && (context.GetCurrentChar().Equals(' ') || ResolveNewLine(context))) { context.IncIndex(); } }
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); }
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())); }
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())); }
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(); } }
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)); } }
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())); }