a = b = 1 just syntactic sugar?
Greg Ewing (using news.cis.dfn.de)
g2h5dqi002 at sneakemail.com
Tue Jun 10 22:33:11 EDT 2003
Martin v. Löwis wrote:
> I think it is as easy as this:
>
> - Replace a construct FOO* with FOO_seq, and define
>
> FOO_seq: /* empty */
> | FOO FOO_seq
>
> - Replace a construct [FOO] with FOO_opt, and define
>
> FOO_opt: /* empty */
> | FOO
I don't think it's *quite* that easy, because pgen will
accept something like
FOO = A B C | A B D
whereas if you naively re-wrote that as
FOO = X | Y
X = A B C
Y = A B D
pgen would complain that the first sets of X and Y
are not disjoint.
So you can't just blindly turn parts of the REs
into non-terminals -- some refactoring may be needed
to get the result to be an LL(1) grammar. A proof
would be required that this refactoring is always
possible.
--
Greg Ewing, Computer Science Dept,
University of Canterbury,
Christchurch, New Zealand
http://www.cosc.canterbury.ac.nz/~greg
More information about the Python-list
mailing list