예제 #1
0
 public NameToken(NameTokenKind kind, int start, int length, string fullText)
 {
     Kind      = kind;
     Start     = start;
     Length    = length;
     _fullText = fullText;
 }
예제 #2
0
 /// <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}");
 }
예제 #3
0
        //  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);
            }
        }