Oh, I see. In your example, there were hashes in the array, which wouldn't match a sequence. That would be a subtree. I've see now.
On Wed, May 18, 2011 at 2:44 PM, Thiel Chang <[email protected]> wrote: > Hi Jason, > > Many thanks for your response and I will articulate my problem again. > > My problem is that I don't understand how to apply the sequence(symbol) in > a transformation rule. Althought, I saw it in the Parslet examples it is > still a fuzzy item for me. > Therefore, I created a problem and in the solution I want to use the > sequence(symbol), if possible. > > Let the expression be: { :result => [{ :w => "a" }, { :x => "b" } , { :y > => "c", :z => "d"} ] } . So :result => [ ... ] is a hash with :result > as a key and the array [ ... ] as a value. > > I want this expression be transformed into: { :result => [ "imf", > "strauss", "kahn" ] } :-) > > In the Parslet Transformation documentation it is said: "....., but you > cannot replace the array as a whole. This is the purpose of > sequence(symbol): sequence(:x) which will match all of these [ 'a', 'b', > 'c' ] [ 'a', 'a', 'a' ] [ Foo.new, Bar.new ] ... " Besides, > sequence is very picky about what it consumes and what not. But that's not > defined in CLEAR way in this documentation and not ILLUSTRATED with > examples. This part of the documentation is not very didactic. > > When I consider this problem as plain Ruby code it is easy to transform the > code, but that's not the solution I want. My goal to understand the use of > sequence in a transformation rule. > > Cheers, > > Thiel > > Op 18-5-2011 21:01, Jason Garber schreef: > > Thiel, > :elements gets captured and becomes available in the block's context. If > you want the output to be a hash, you have to have {:result => element } in > the block. But then your transformation rule does nothing, so I don't see > why you'd want to. > > I couldn't follow your example very well. Perhaps that's why no one has > responded yet. Try articulating your problem again if you're still having > trouble. > > Jason > > On Wed, May 18, 2011 at 5:55 AM, Thiel Chang <[email protected]> wrote: > >> Hi guys, >> >> I am still struggling with the transformation rules. :-( >> >> My aim is to understand the application of sequence(symbol) in >> transformation rules. >> >> So, I made a simple test to replace an array of objects in a >> transformation rule. >> >> The input tree for Transform is: >> >> { :result => [{ :w => "a" }, { :x => "b" } , { :y => "c", :z => "d"} ] } >> >> and the transformation rule is: >> >> rule( :result => sequence(:elements) ) { puts elements.inspect } >> >> The new array is: [ "imf", strauss", "kahn"] >> >> The required result should be: { :result => [ "imf", "strauss", "kahn" ] >> } >> >> I would be very glad if anyone can provide the solution(s). >> >> Many thanks in advance, >> >> Thiel >> >> >> >> > >
