[antlr-interest] repeating the parsing of a subtree

Jim Idle jimi at temporal-wave.com
Thu Nov 5 08:36:05 PST 2009


Should you not be using the push(index) and pop() of the CommonTreeNodeStream or mark() and rewind()? The index() method will give you the current location when you hit the node that you want to repeat.

Jim




> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Claude Moulin
> Sent: Thursday, November 05, 2009 6:20 AM
> To: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] repeating the parsing of a subtree
> 
> Hello,
> First a remark: AntLRWorks doesn't display correctly the graph of a
> rule
> containing the . meta-character.
> I have found two solutions:
> 1) Create a tree based interpreter (see p 245 of Terence's last book -
> very interesting book)
> 2) Create a specific walker and launch the rule able to parse the list
> tree:
> 
> For the tree
> ^(REPEAT a = atom list = .)
> 
> I create the following code:
> {
>   for (int i = 0; i < $a.r ; i++) {
>     CommonTreeNodeStream nodes = new CommonTreeNodeStream(liste);
>     MyTreeWalker walker = new MyTreeWalker(nodes); // the same class as
> the one generated.
>     walker.list_instructions();
>   }
> }
> 
> I am not completely satisfied.
> Claude
> ------------------------------
> 
> Message: 11
> Date: Sat, 24 Oct 2009 20:09:17 +0200
> From: "Claude Moulin" <claude.moulin at hds.utc.fr>
> Subject: [antlr-interest] repeating the parsing of a subtree
> To: <antlr-interest at antlr.org>
> Message-ID: <3402BD9F2C1434438EF1F319BE558FBB01258E7B at xena.ad.utc>
> Content-Type: text/plain; charset="us-ascii"
> 
> I never had a good solution to the problem that I resolved before using
> (or rendering public) the getNodeIndex method of the
> CommonTreeNodeStream
> 
> class.
> 
> I have the following tree:
> 
> ^(REPEAT a = atom list = .)
> 
> Where list can be parsed with a specific rule: list_instructions.
> 
> atom returns an integer giving the number of times (maybe 0) the list
> of
> instructions has to be executed.
> 
> The semantics of the instruction is then clear.
> 
> In the previous version of antlr I used the following interpreting Java
> code:
> 
> {
> 
>  for (int i = 0; i < $a.r ; i++) {
> 
>    push(list);
> 
>    list_instructions();
> 
>    pop();
> 
> }
> 
> Where push and pop method are added to the tree parser:
> 
> private void push(CommonTree tree) {
> 
>  int n = ((CommonTreeNodeStream)input).getNodeIndex(tree);
> 
>  if (n >= 0)
> 
>    ((CommonTreeNodeStream)input).push(n);
> 
> }
> 
> private void pop() {
> 
>      ((CommonTreeNodeStream)input).pop();
> 
>   }
> 
> In version 3.2 CommonTreeNodeStream has been updated and I no longer
> understand how to parse a subtree of the AST when it is needed and
> possibly several times. The problem was to find the index of a Tree
> root
> in the AST representation.
> 
> 
> 
> Can someone give the solution?
> 
> Thank you
> 
> Claude
> 
> 
> 
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL:
> http://www.antlr.org/pipermail/antlr-
> interest/attachments/20091024/01eb9
> 5ff/attachment-0001.html
> 
> ------------------------------
> 
> _______________________________________________
> antlr-interest mailing list
> antlr-interest at antlr.org
> http://www.antlr.org/mailman/listinfo/antlr-interest
> 
> End of antlr-interest Digest, Vol 59, Issue 25
> **********************************************
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> email-address





More information about the antlr-interest mailing list