[antlr-interest] parse tree construction
John B. Brodie
jbb at acm.org
Tue Aug 25 10:26:53 PDT 2009
Greetings!
Martijn's suggestions are close but need a couple of tweaks, see
below...
On Tue, 2009-08-25 at 18:50 +0200, Martijn Reuvers wrote:
> Hi Safiye,
>
> As Sam said, recursion might be what you need.
>
> Something like this gives your tree I believe:
>
> grammar test;
>
> options {
> output=AST;
>
> }
>
> x
> : A B y -> ^(B A y)
> ;
this will REQUIRE at least 1 instance of the C A B clause. whereas the
original rule had it being 0 or more. to fix make the y be y?, e.g:
x : A B y? -> ^(B A y?) ;
> y : C A B y* -> ^(B A C y*)
> ;
this is a recursive application of the y rule inside a loop! i suspect
it will work but seems very dangerous to me. i would suggest using the ?
operator rather than the * operator, 0 or 1 vs 0 or many; e.g:
y : C A B y? -> ^(B A C y?) ;
>
> A : 'A';
>
> B : 'B';
>
> C : 'C';
>
>
> Martijn
>
> On Tue, Aug 25, 2009 at 4:57 PM, Safiye Celik<safisce at gmail.com> wrote:
> > Hi
> > I wanna ask one more question about parse tree construction..
> > I have such a rule:
> >
> > x: A B (C A B)* and I have to create such a tree for it:
> >
> >
> > B
> > / | \
> > A C B
> > / | \
> > A C B
> > / | \
> > A..C. B......and
> > continues like that. (The leftmost a B is in the rule, the closest it is to
> > the root of the tree.This is true also for other tokens)
> >
> > How can I create such a tree for that rule? the "*" confuses everything :(
> >
> >
> > --
> > -safiye
Hope this helps...
-jbb
More information about the antlr-interest
mailing list