[antlr-interest] Ambiguous grammar or Antlr?
Gary R. Van Sickle
g.r.vansickle at att.net
Thu Jul 2 22:47:30 PDT 2009
Jim Idle wrote:
[snip]
> Even with backtracking, you still need to know something
> about LL(k) and parsing etc, and switching on backtrack mode
> will hide all your problems. It also means, as you have found
> out, that in the event of a syntax error, you cannot
> determine much about the location of your error.
>
> Basically, you will need to left factor at least some parts
> of your grammar. In this case, if you have something like:
>
> | ID
> | ID '(' expr ')'
> | ID something else
>
> and (probably more complicated than that is your issue), then
> look to do:
>
> | ID ( '(' expr
> | something
> )?
>
> and so on.
But isn't the whole point of LL(*) to eliminate the need to do exactly this
sort of left-factoring? Section 11.3 of Ter's book gives essentially the
former as an example of why LL(*) makes it so you don't have to do a manual
refactoring such as the latter. In fact, that section makes the argument
that one should *not* do the left-factoring manually, if for no other reason
than to maintain the readability of the grammar.
--
Gary R. Van Sickle
More information about the antlr-interest
mailing list