Hi,

I have the following parse tree:

{:result=>

[{:lterm=>"t0"},

{:plus=>"+ "@3, :rterm=>"t1"},

{:plus=>"+ "@7, :rterm=>"t2"},

{:plus=>"+ "@11, :rterm=>"t3"},

{:plus=>"+ "@15, :rterm=>"t4"}]}

 and I transformed this tree in a ("stupid" way) into :

{:result=>

[{:lterm=>"t10"},

{:plus=>"+ "@7, :rterm=>"t2"},

{:plus=>"+ "@11, :rterm=>"t3"},

{:plus=>"+ "@15, :rterm=>"t4"}]}

and printed also: t10 = t0 +t1

To get this result I used the rule:

@t.rule(:result => subtree(:z)) {

lterm= {}

keep= false

values = []

keys= []

ops= []

index= 0

ti= "t10"#To do: generate temp var tn

z.each { |key|

key.each { | k, v|

values[index] = v

keys[index]= k

if k == :lterm

if keep == false

lterm = {:lterm => ti}

end

keep= true

next

end

}

index += 1

}

z[0]= lterm

index = 0

z[1].each { |k,v| ops[index] = v

index += 1

}

z.delete_at(1)

puts "#{ti} = #{values[0]} #{ops[0]} #{values[1]}"

{:result => z}

}

This rule obviously should not be the way to do transformations with Parslet.

How could I get it done in a better way?

Thanks in advance,

Thiel

Reply via email to