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