Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        public IRootNode ParseGoal()
        {
            ParseInput();
            Match(TokenKind.Eof);
            _scanner.Advance();

            return(new RootNode(_astBuilder.TokenDefinitions, _astBuilder.SyntaxTree));
        }