private Token ReadNumber(CodeReader reader) { string number = ""; int tokenLine = reader.Line; int tokenColumn = reader.Column; while (reader.CheckCurrent(char.IsDigit)) { number += reader.Consume(); } if (reader.TryMatch('.')) { number += '.'; while (reader.CheckCurrent(char.IsDigit)) { number += reader.Consume(); } } double result; if (!double.TryParse(number, out result)) { OnError("Invalid number", tokenLine, tokenColumn); } return(new Token(number, TokenKind.Number, tokenLine, tokenColumn)); }
/// <summary> /// Matches an expected character with current character of the reader. If doesnt match an error will be reported. /// </summary> private void Match(CodeReader reader, char c) { if (!reader.TryMatch(c)) { OnError("Expected character " + c, reader.Line, reader.Column); } }
private Token ReadTextLiteral(CodeReader reader) { Match(reader, '\"'); string text = ""; int tokenLine = reader.Line; int tokenColumn = reader.Column; while (!reader.EndOfFile && !reader.EndOfLine) { if (reader.TryMatch('\"')) { return(new Token(text, TokenKind.Text, tokenLine, tokenColumn)); } text += reader.Consume(); } OnError("Invalid text literal ending", tokenLine, tokenColumn + text.Length); return(new Token(text, TokenKind.Text, tokenLine, tokenColumn)); }