示例#1
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);
        }
示例#2
0
 public Node ElseStatement()
 {
     var else_node = new Else_Statement()
     {
         AnchorToken = Expect(TokenCategory.ELSE)
     };
     else_node.Add(ZeroOrMore(firstOfStatement, Statement));
     return else_node;
 }