# File kwartz.rb, line 3425
        def parse_stmt_if
            Kwartz::assert() unless token() == :if || token() == :elsif
            t = token()
            scan()
            _syntaxerr("':#{t.id2name}' requires '('.") unless token() == '('
            scan()
            cond_expr = parse_expression()
            _syntaxerr("':#{t.id2name}(' is not closed by ')'.") unless token() == ')'
            scan()
            then_node = parse_stmt_list()         ## nodelist
            else_node = nil
            if token() == :elsif
                else_node = parse_stmt_if()       ## stmtnode
            else
                if token() == :else
                    scan()
                    else_node = parse_stmt_list()  ## nodelist
                end
                _syntaxerr("':else' is not closed by ':end'.") unless token() == :end
                scan()
            end
            return IfStmtNode.new(:if, then_node, else_node, cond_expr)
        end