fix array and hash constants, now seperated out

This commit is contained in:
Torsten Ruger 2015-10-09 17:29:24 +03:00
parent dff0e8fab4
commit b424306156
7 changed files with 34 additions and 40 deletions

View File

@ -5,15 +5,15 @@ module Parser
rule(:array_constant) do
left_bracket >>
( ((operator_expression|r_value).as(:array_element) >> space? >>
(comma >> space? >> (operator_expression|r_value).as(:array_element)).repeat(0)).repeat(0,1)).as(:array_constant) >>
( (r_value.as(:array_element) >> space? >>
(comma >> space? >> r_value.as(:array_element)).repeat(0)).repeat(0,1)).as(:array_constant) >>
space? >> right_bracket
end
rule(:hash_pair) { basic_type.as(:hash_key) >> association >> (operator_expression|r_value).as(:hash_value) }
rule(:hash_constant) { left_brace >> ((hash_pair.as(:hash_pair) >>
(comma >> space? >> hash_pair.as(:hash_pair)).repeat(0)).repeat(0,1)).as(:hash_constant)>>
rule(:hash_pair) { basic_type.as(:hash_key) >> association >> r_value.as(:hash_value) }
rule(:hash_constant) { left_brace >> ((hash_pair.as(:hash_pair) >>
(comma >> space? >> hash_pair.as(:hash_pair)).repeat(0)).repeat(0,1)).as(:hash_constant)>>
space? >> right_brace }
end
end
end

View File

@ -1,6 +1,5 @@
[42, foo]
-- -- --
s(:expressions,
s(:array,
s(:int, 42),
s(:name, :foo)))
s(:array,
s(:int, 42),
s(:name, :foo))

View File

@ -1,11 +1,10 @@
[ 3 + 4 , foo(22) ]
-- -- --
s(:expressions,
s(:array,
s(:operator, "+",
s(:int, 3),
s(:int, 4)),
s(:call,
s(:name, :foo),
s(:arguments,
s(:int, 22)))))
s(:array,
s(:operator_value, :+,
s(:int, 3),
s(:int, 4)),
s(:call,
s(:name, :foo),
s(:arguments,
s(:int, 22))))

View File

@ -1,5 +1,4 @@
[42]
-- -- --
s(:expressions,
s(:array,
s(:int, 42)))
s(:array,
s(:int, 42))

View File

@ -1,7 +1,6 @@
{ foo => 33 }
-- -- --
s(:expressions,
s(:hash,
s(:assoc,
s(:name, :foo),
s(:int, 33))))
s(:hash,
s(:assoc,
s(:name, :foo),
s(:int, 33)))

View File

@ -1,7 +1,6 @@
{ foo => true }
-- -- --
s(:expressions,
s(:hash,
s(:assoc,
s(:name, :foo),
s(:true))))
s(:hash,
s(:assoc,
s(:name, :foo),
s(:true)))

View File

@ -1,10 +1,9 @@
{foo => 33 , bar => 42}
-- -- --
s(:expressions,
s(:hash,
s(:assoc,
s(:name, :foo),
s(:int, 33)),
s(:assoc,
s(:name, :bar),
s(:int, 42))))
s(:hash,
s(:assoc,
s(:name, :foo),
s(:int, 33)),
s(:assoc,
s(:name, :bar),
s(:int, 42)))