Exemple #1
0
        private ForStatement ParseFor()
        {
            ForStatement node = new ForStatement(curtok);
            Advance(); // advance over FOR

            AssertAndAdvance(TokenID.LParen);

            if (curtok.ID != TokenID.Semi)
            {
                ExpressionNode expr = ParseLocalDeclarationOrExpression();
                if (expr is LocalDeclaration)
                {
                    node.Init = new NodeCollection<ExpressionNode>();
                    node.Init.Add(expr);
                }
                else
                {
                    node.Init = new ExpressionList();
                    node.Init.Add(expr);
                    while (curtok.ID == TokenID.Comma)
                    {
                        Advance();
                        node.Init.Add(ParseExpression());
                    }
                }
            }
            AssertAndAdvance(TokenID.Semi);

            if (curtok.ID != TokenID.Semi)
                node.Test = ParseExpression();

            AssertAndAdvance(TokenID.Semi);

            if (curtok.ID != TokenID.RParen)
            {
                node.Inc = ParseExpressionList();
            }
            AssertAndAdvance(TokenID.RParen);
            ParseBlock(node.Statements);

            if (curtok.ID == TokenID.Semi)
            {
                Advance();
            }
            return node;
        }
Exemple #2
0
		private ForStatement ParseFor()										
		{
            ForStatement node = new ForStatement(curtok);
			Advance(); // advance over FOR

			AssertAndAdvance(TokenID.LParen);

			if (curtok.ID != TokenID.Semi)
			{
                ExpressionNode expr = ParseExpression();
				node.Init.Add(expr);
				while (curtok.ID == TokenID.Comma)
				{
					AssertAndAdvance(TokenID.Comma);
                    expr = ParseExpression();
                    node.Init.Add(expr);
				}
			} 
			AssertAndAdvance(TokenID.Semi);

			if (curtok.ID != TokenID.Semi)
			{
				node.Test.Add(ParseExpression());
				while (curtok.ID == TokenID.Comma)
				{
					AssertAndAdvance(TokenID.Comma);
					node.Test.Add(ParseExpression());
				}
			}
			AssertAndAdvance(TokenID.Semi);

			if (curtok.ID != TokenID.RParen)
			{
				node.Inc.Add(ParseExpression());
				while (curtok.ID == TokenID.Comma)
				{
					AssertAndAdvance(TokenID.Comma);
					node.Inc.Add(ParseExpression());
				}
			}
			AssertAndAdvance(TokenID.RParen);
			ParseBlock(node.Statements);

			if (curtok.ID == TokenID.Semi)
			{
				Advance();
			}
			return node;
		}
        public virtual object VisitForStatement(ForStatement forStatement, object data)
        {
            stackMap.Push(forStatement);
            forStatement.Init.AcceptVisitor(this, data);

            forStatement.Test.AcceptVisitor(this, data);

            forStatement.Inc.AcceptVisitor(this, data);

            forStatement.Statements.AcceptVisitor(this, data);

            stackMap.Pop();
            return null;

        }