Exemple #1
0
        private Statement ParseIfStatement()
        {
            Eat(TokenKind.KeywordIf);
            var start = GetStart();

            List<Tuple<Expression, Statement>> testPairs = new List<Tuple<Expression, Statement>>();
            Eat(TokenKind.LeftParenthesis);
            Expression test = ParseExpression();
            Eat(TokenKind.RightParenthesis);

            Statement ifTrue = ParseBlockOrStatement();
            Statement ifFalse = null;
            testPairs.Add(new Tuple<Expression, Statement>(test, ifTrue));

            while (MaybeEat(TokenKind.KeywordElse))
            {
                test = null;
                if (MaybeEat(TokenKind.KeywordIf))
                {
                    Eat(TokenKind.LeftParenthesis);
                    test = ParseExpression();
                    Eat(TokenKind.RightParenthesis);

                    ifTrue = ParseBlockOrStatement();
                    testPairs.Add(new Tuple<Expression, Statement>(test, ifTrue));
                    continue;
                }

                ifFalse = ParseBlockOrStatement();
                break;
            }

            IfElseStatement ret = new IfElseStatement(testPairs.ToArray(), ifFalse);
            ret.SetLoc(_globalParent, start, GetEnd());
            return ret;
        }
Exemple #2
0
 public override bool Walk(IfElseStatement node)
 {
     node.Parent = _currentScope;
     return base.Walk(node);
 }