Pegged / Problem using the parse tree
Robert M. Münch
robert.muench at saphirion.com
Sat Aug 3 14:32:08 PDT 2013
Hi, I'm playing around with PEGGED (which is awsome BTW) but I'm a bit
stucked how to use it best.
I have this grammer (stripped down to the essentials):
mixin(grammar("
Rebol3:
set_word <- word ':' {set_word_handling} & delim
word <- ~[a-z]+ {word_handling}
"
));
I use these two semantic actions:
PT word_handling(PT)(PT p){
writeln(p.matches[0]);
return(p);
}
PT set_word_handling(PT)(PT p){
writeln(p);
return(p);
}
The grammer output looks like this:
Rebol3 [0, 25]["a", ":", "1", "b", ":", "2", "c", ":", "3", "d", ":", "4"]
+-Rebol3.start [0, 25]["a", ":", "1", "b", ":", "2", "c", ":", "3",
"d", ":", "4"]
+-Rebol3.value [0, 5]["a", ":"]
| +-Rebol3.set_word [2, 4]["a", ":"]
| +-Rebol3.word [2, 3]["a"]
What I would like to do now, is to access the ["a", ":"] array from
set_word_handling. But when I print the partse tree p from it I just
get:
literal!(":") [3, 4][":"]
So, I thought that I can access "a" from the child, but no success.
Why do I want to access the word "a" from the set_word_handling
function? Because there I know what to do with the word. The workaround
now, is to keep track of the word "a" by setting a global variable from
the word_handling rule and later reference it from set_word_handling.
Not so elegant IMO.
Does anyone has a better idea how to access the child parts from
set_word_handling?
Thanks.
--
Robert M. Münch
Saphirion AG
http://www.saphirion.com
smarter | better | faster
More information about the Digitalmars-d
mailing list