9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/parsr/rules/array.rb', line 9
def match(scanner, &block)
if scanner.scan(/\[\s*/)
array = []
begin
if scanner.scan(/[a-zA-Z_][0-9a-zA-Z_]*\:/)
token = Parsr::Token.new(scanner.matched.chomp(':').to_sym)
array << parse_unclosed_hash(scanner, token, &block)
break
end
token = yield
if token.is_a?(Parsr::Token) && scanner.scan(/\s*=>\s*/)
array << parse_unclosed_hash(scanner, token, &block)
break
end
array << token.value if token.is_a?(Parsr::Token)
end while scanner.scan(/\s*,\s*/)
raise Unterminated.new(scanner) unless scanner.scan(/\s*\]/)
Parsr::Token.new(array)
end
end
|