Franklin,

So I spent some time debugging your parser and basically the problem is to do 
with the way you are building the tree (well actually the problem might be the 
syntax of the language you are parsing, but you probably don't control that 
;-). The new tree stream is making some assumptions about the parents of 
siblings and you have not kept those relationships intact. So, you can traverse 
down and along the tree but the new stream also looks at parents to see if it 
needs to add UP nodes in to the stream. You parents are the wrong parents, so 
it makes the wrong decision. The old stream will work because it doesn't need 
that information as it has buffered them all at once.

I think that the issue may well be that you are doing this directly on the 
nodes, and not via the tree adaptor, but the same thing would happen if the 
tree adaptor does not call setParent() - pretty sure it does though. 

So first, here is your grammar rewritten without anything but standard rewrite 
rules (lexer skipped and compressed for space). You can see that this is 
somewhat, err... 'simpler' ;-)

start
    : tier+ EOF!
    ;

tier
    : c+=content+ ';' d+=depContent+ '.'
        -> ^(TIER ^(WORD $c $d)+ )
    ;

content
    :   word |   INT
    ;

word
    : ID
    ;

depContent
    : i=INT -> ^(PHO $i)
    ;

This builds exactly the same tree as you do, but builds it correctly. Your tree 
parser then walks this perfectly. I would stick with something like this myself 
and if you need to check cardinality, set a validity flag before the rewrite 
and rewrite conditionally.

But the other reason for doing this is that if you now look at the generated 
Java code for the tier rule, you will see how to use the adaptor to add 
children to nodes, and this ought to preserve the parent child relationships 
properly. Basically, if you feel that you MUST write the tree yourself, then 
write a small piece of grammar that does what you want to do, and use the code 
that ANTLR generates - that way you will get it correct.

So there is no bug in the new TreeNodeStream and you should go back to it.

Cheers,

Jim








List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to