public T MatchAndGet <T>() where T : IToken { var next = _scanner.Peek(); if (!(next is T)) { throw new UnexpectedTokenException("Unexpected token") { UnexpectedToken = next, ExpectedTokenType = typeof(T) } } ; return((T)_scanner.Advance()); }
private void ParseStatementList() { var firstSetOfStatement1 = new[] { TokenKind.Let, TokenKind.Print }; MatchOneOf(firstSetOfStatement1); ParseStatement(); _astBuilder.StmtEnd(_scanner.CurrentToken); Match(TokenKind.Semicolon); _scanner.Advance(); var firstSetOfKleeneStar1 = new[] { TokenKind.Let, TokenKind.Print }; while (firstSetOfKleeneStar1.Contains(_scanner.CurrentToken.TokenKind)) { ParseStatement(); _astBuilder.StmtEnd(_scanner.CurrentToken); Match(TokenKind.Semicolon); _scanner.Advance(); } }
public IRootNode ParseGoal() { ParseInput(); Match(TokenKind.Eof); _scanner.Advance(); return(new RootNode(_astBuilder.TokenDefinitions, _astBuilder.SyntaxTree)); }