# File kwartz.rb, line 3310
        def parse_assignment(flag_foreach_stmt=false)
            left_expr = parse_expression()
            if _assign_op?(tkn = token)
                scan()
                right_expr = parse_expression()
                unless left_expr.token == :variable
                    msg = nil
                    flag = flag_foreach_stmt
                    case left_expr.token
                    when '[]', '{}', '[:]'
                        if @toppings[:inhibit_array_assign]
                            msg = "cannot use array/hash as loop var."    if     flag_foreach_stmt
                            msg = "cannot assign value into array/hash."  unless flag_foreach_stmt
                        end
                    when '.'
                        if @toppings[:inhibit_property_assign]
                            msg = "cannot use property as loop var."      if     flag_foreach_stmt
                            msg = "cannot assign value into property."    unless flag_foreach_stmt
                        end
                    when :true, :false, :null
                        msg = "cannot use true/false/null as loop var."   if     flag_foreach_stmt
                        msg = "cannot assign value into true/false/null." unless flag_foreach_stmt
                    else
                        msg = "cannot use expression as loop var."        if     flag_foreach_stmt
                        msg = "cannot assign value into expression."      unless flag_foreach_stmt
                    end
                    raise SemanticError.new(msg) if msg
                end
                expr = ExprNode.new(tkn, left_expr, right_expr)
            else
                expr = left_expr
            end
            return expr
        end