Exemplo n.º 1
0
        private ForStatement ForStatement(ParseNode node)
        {
            var forStatement = new ForStatement();

            _enclosure = forStatement;

            _scopes.Push(new VarScope());

            var children = node.Children;

            children.Skip(TokenTag.FOR);
            children.Skip(TokenTag.OPEN_PAREN);
            var declarations = children.Check(ParseNodeTag.VarDeclaration)
                ? children.GetAndMove(VarDeclarations)
                : new List <VarDeclaration>();

            children.Skip(TokenTag.SEMICOLON);
            var condition = children.Check(child => !child.IsTerminal)
                ? children.GetAndMove(Expression)
                : new EmptyExpression();

            children.Skip(TokenTag.SEMICOLON);
            var postIteration = children.Check(child => !child.IsTerminal)
                ? children.GetAndMove(StatementExpression)
                : new EmptyExpression();

            children.Skip(TokenTag.CLOSE_PAREN);
            var body = children.GetAndMove(Statement);

            _scopes.Pop();

            forStatement.Init(declarations, condition, postIteration, body);
            return(forStatement);
        }