# File kwartz.rb, line 3103
        def parse_array
            expr = parse_item()
            while true do
                case token()
                when '['
                    scan()
                    index_expr = parse_expression()
                    _syntaxerr("array '[' is not closed.") unless token() == ']'
                    scan()
                    expr = ExprNode.new('[]', expr, index_expr)
                when '{'
                    scan()
                    index_expr = parse_expression()
                    _syntaxerr("hash '{' is not closed.") unless token() == '}'
                    scan()
                    expr = ExprNode.new('{}', expr, index_expr)
                when '[:'
                    scan()
                    _syntaxerr("'[:' require a word.") unless token() == :name
                    word = token_str
                    scan()
                    _syntaxerr("']' required.") unless token() == ']'
                    scan()
                    expr = ExprNode.new('[:]', expr, word)
                when '.'
                    scan()
                    _syntaxerr("property name is invalid.") unless token() == :name
                    property = token_str
                    scan()
                    expr = ExprNode.new('.', expr, property)
                else
                    break
                end
            end
            return expr
        end