[antlr-interest] Why doesn't this work?

Tim Gleason tgleason at gmail.com
Sun Jun 24 14:40:22 PDT 2007


Huh.  That worked.  I'm not sure whether to feel silly or confused --
so I'll stick with a little of both :)

Thank you!
tim


On 6/24/07, John B. Brodie <jbb at acm.org> wrote:
>
> Tim Gleason asked (in part):
> >I'm sorry for bothering you guys.  I've been translating a grammar
> >from a book into ANTLR and I can't seem to get passed a problem with
> >expressions and parenthesis.  At the bottom of included a subset of
> >the grammar that demonstrates the problem.
> >
> >For some reason the parser gets confused when it sees '('.  It doesn't
> >seem to know if it is grouping an expression or the parameters of a
> >function call.  But I don't /think/ the grammar is ambiguous.
> >
> >The simplest case that fails is the input to the 'statement' rule:
> >
> >foo();
> >
> >It will fail to parse at rule 'expression'.  But if I remove the line
> >marked with an asterisk, it parses fine.  I don't understand how one
> >affects the other.
> >
> >Any help would be greatly appreciated!
> >...snipped...
>
> I can not explain why. But it would seem that your predicate in the
> expression rule is causing something to go awry. If I replace your
> expression rule with:
>
> expression
>         :       functionCall ( ('*'|'/') functionCall )*
>         ;
>
> then all of the strings "foo;", "foo*2;", "(foo);", and "foo();" are
> parsed without complaint.
>
> Hope this helps...
>     -jbb
>


More information about the antlr-interest mailing list