private Lexeme Lexeme(LexemeKind kind, string content = null) { if (kind == LexemeKind.NewLine) { Column = 0; Line++; } content = content ?? kind.GetCharacter() ?? Buffer.ToString(); Buffer.Clear(); return(new Lexeme(kind, Location, content)); }
private Lexeme Take(LexemeKind lexemeKind, string expected = null, bool ignoreWhitespace = true) { if (ignoreWhitespace) { SkipWhitespaces(); } if (Current.Kind != lexemeKind) { var lexemeChar = lexemeKind.GetCharacter(); Error($"expected {expected ?? lexemeKind.ToString()}{(lexemeChar != null ? $" '{lexemeChar}'" : "")}, found '{Current.Content}' ({Current.Kind})"); } return(TakeAny()); }