public NameToken(NameTokenKind kind, int start, int length, string fullText) { Kind = kind; Start = start; Length = length; _fullText = fullText; }
/// <summary> /// Require the given token to come next, or throw an exception. /// </summary> /// <param name="kind">What kind of token to expect.</param> /// <param name="errorMessage">The error message, which will have a token position added to it.</param> private void Expect(NameTokenKind kind, string errorMessage) { if (_lexer.Next() == kind) { return; } throw new NameParseException($"{errorMessage} at character {_lexer.Token.Start}"); }
// generic-part-opt ::= '`' NUMBER | "``" NUMBER | private int ParseGenericPartOpt(out NameTokenKind kind) { switch (_lexer.Next()) { case NameTokenKind.Backtick: Expect(NameTokenKind.Number, "Count of generic arguments after `"); kind = NameTokenKind.Backtick; return(int.Parse(_lexer.Token.Text)); case NameTokenKind.DoubleBacktick: Expect(NameTokenKind.Number, "Count of generic arguments after ``"); kind = NameTokenKind.DoubleBacktick; return(int.Parse(_lexer.Token.Text)); default: _lexer.Unget(); kind = NameTokenKind.Error; return(0); } }