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()
else_node = nil
if token() == :elsif
else_node = parse_stmt_if()
else
if token() == :else
scan()
else_node = parse_stmt_list()
end
_syntaxerr("':else' is not closed by ':end'.") unless token() == :end
scan()
end
return IfStmtNode.new(:if, then_node, else_node, cond_expr)
end