示例#1
0
        public Node IfStatement()
        {
            var if_node = new If_Statement()
            {
                AnchorToken = Expect(TokenCategory.IF)
            };
            if_node.Add(Expression());
            Expect(TokenCategory.THEN);
            if_node.Add(new Statement_List(){
                ZeroOrMore(firstOfStatement, Statement)
            });
            if (Has(TokenCategory.ELSEIF))
            {
                if_node.Add(new Condition_List(){
                    ZeroOrMore(TokenCategory.ELSEIF, () =>
                                    {
                                        return ElifStatement();
                                    })
                });
            }

            if (Has(TokenCategory.ELSE))
            {
                if_node.Add(ElseStatement());
            }

            Expect(TokenCategory.END);
            Expect(TokenCategory.SEMICOLON);
            return if_node;
        }
示例#2
0
        public Node IfStatement()
        {
            var ifNode = new If_Statement()
            {
                AnchorToken = Expect(TokenCategory.IF)
            };

            ifNode.Add(Expression());
            Expect(TokenCategory.THEN);

            var stmtList = new Statement_List();

            while (firstOfStatement.Contains(CurrentToken))
            {
                stmtList.Add(Statement());
            }
            ifNode.Add(stmtList);

            while (CurrentToken == TokenCategory.ELSEIF)
            {
                var elseIfNode = new ElseIf_Statement()
                {
                    AnchorToken = Expect(TokenCategory.ELSEIF)
                };

                elseIfNode.Add(Expression());
                Expect(TokenCategory.THEN);

                var stmtListElseIf = new Statement_List();
                while (firstOfStatement.Contains(CurrentToken))
                {
                    stmtListElseIf.Add(Statement());
                }

                elseIfNode.Add(stmtListElseIf);
                ifNode.Add(elseIfNode);
            }
            while (CurrentToken == TokenCategory.ELSE)
            {
                var elseNode = new Else_Statement()
                {
                    AnchorToken = Expect(TokenCategory.ELSE)
                };
                var stmtListElse = new Statement_List();
                while (firstOfStatement.Contains(CurrentToken))
                {
                    stmtListElse.Add(Statement());
                }

                elseNode.Add(stmtListElse);
                ifNode.Add(elseNode);
            }

            Expect(TokenCategory.END);
            Expect(TokenCategory.EOL);

            return(ifNode);
        }