def parse_item
case token()
when :name
name = token_str()
scan()
if token() != '('
expr = ExprNode.new(:variable, name, nil)
else
scan()
if token() == ')'
arg_expr = nil
else
arg_expr = parse_expression()
while token() == ',' do
scan()
arg2_expr = parse_expression()
arg_expr = ExprNode.new(',', arg_expr, arg2_expr)
end
end
_syntaxerr("function '#{name}(' is not closed.") unless token() == ')'
scan()
expr = ExprNode.new(:function, name, arg_expr)
end
when '('
scan()
expr = parse_expression()
_syntaxerr("')' expected.") unless token() == ')'
scan()
else
Kwartz::assert()
end
return expr
end