[antlr-interest] Stuck with parser & tree grammar

G R relationalalgebra at gmail.com
Sat Dec 8 04:58:24 PST 2007


Just forget this mail.
I've been able to get rid of this attributes that was harassing my life and
my grammar :-)
Thanks for help indeed.

G.R.

2007/12/8, Harald Mueller <harald_m_mueller at gmx.de>:
>
> Hi -
> Just a guess (without ever having done that myself): Maybe there has to be
> one (last) condition-less rewrite; so if you drop the {BinaryOp==Divide}?,
> it might work ... sorry if I'm compeltely off here.
> Regards
> Harald
> -------- Original-Nachricht --------
> > Datum: Fri, 7 Dec 2007 13:04:25 +0100
> > Von: "G R" <relationalalgebra at gmail.com>
> > An: "antlr-interest Interest" <antlr-interest at antlr.org>
> > Betreff: [antlr-interest] Stuck with parser & tree grammar
>
> > Hi all!
> > I'm still trying to translate relational algebra into SQL.
> > I used to some problems with my grammar, so I decide to change it into a
> > LL(1) grammar.
> > So, a relational algebra query can be describe like this :
> >
> > raExpr
> > :    raQuery^
> > |    RelationName^;
> >
> > raQuery
> > :    project^
> > |    select^
> > |    rename^
> > |    binaryExpr^;
> >
> > binaryExpr
> > :    r1=relation (BinaryOp r2=relation
> > |     LeftBrack a1=AttributeName RightBrack Join r2=relation LeftBrack
> > a2=AttributeName RightBrack)
> >     ->{$BinaryOp!=null}?^(BinaryOp $r1 $r2)
> >     ->^(Join ^(Left $r1 $a1) ^(Right $r2 $a2));
> >
> > relation
> > :    LeftParent raQuery RightParent
> >     ->^(raQuery)
> > |    RelationName
> >     ->^(RelationName);
> >
> > As you can see, I'm trying to make possible input like :
> > relationName1 UNION relationName2
> > Or
> > relationName1[AttributeName1] JOIN relationName2[AttributeName2]
> >
> > Using this grammar, this is ok : my AST looks good. Using previous
> inputs,
> > I
> > got the following AST :
> > (UNION relationName1 relationName2)
> > Or
> > (Join (Left relationName1, AttributeName1) (Right relationName2,
> > AttributeName2))
> >
> > The problem is in the tree grammar. I don't know how to deal with the
> rule
> > binaryExpr.
> > I've try this :
> > binaryExpr
> > :    ^(BinaryOp r1=relation r2=relation)
> >         -> {BinaryOp==Union}? Union(left={$r1.st}, right={$r2.st})
> >         -> {BinaryOp==Intersect}? Intersect(left={$r1.st},
> right={$r2.st})
> >         -> {BinaryOp==Difference}? Difference(left={$r1.st},
> > right={$r2.st})
> >         -> {BinaryOp==Divide}? Divide(left={$r1.st}, right={$r2.st})
> > |    ^(Join ^(Left r1=relation a1=AttributeName) ^(Right r2=relation
> > a2=AttributeName))
> >         -> join(leftRel={$lr.st}, leftAtt={$la.text},
> > leftAlias={$lr.alias},
> >                         rightRel={$rr.st}, rightAtt={$ra.text},
> > rightAlias={$rr.alias});
> >
> > But, ANTLR is expecting a REWRITE instead of the optional operator ( | )
> > just after the Divide.
> >
> > So, my question is : how can I generate my walker using the previous
> > parser
> > grammar, or What should I do for this to work ?
> >
> > Thanks for any help.
> >
> > G.R.
>
> --
> GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS.
> Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20071208/979fa8ca/attachment.html 


More information about the antlr-interest mailing list