[Python-Dev] Modifying Grammar/grammar and other foul acts

Gregg Lind gregg.lind at gmail.com
Thu Apr 1 05:38:39 CEST 2010


Thank you for the advice everyone.  This seed has finally born (rotten)
fruit at:

http://writeonly.wordpress.com/2010/04/01/whython-python-for-people-who-hate-whitespace/
http://bitbucket.org/gregglind/python-whython3k/

On Fri, Mar 12, 2010 at 4:13 AM, Georg Brandl <g.brandl at gmx.net> wrote:

> Am 09.03.2010 14:42, schrieb Jeremy Hylton:
> > On Sat, Mar 6, 2010 at 11:27 AM, Gregg Lind <gregg.lind at gmail.com>
> wrote:
> >> Python-devs,
> >>
> >> I'm writing to you for some help in understanding the Python grammar.
>  As an
> >> excuse to deep dive into Python's tokenizer / grammar, I decided (as a
> >> hideous, hideous joke) to want to allow braces where colons are allowed
> (as
> >> flow control).
> >>
> >> Starting from PEP 306 (and branch r311), I hacked on Grammar/Grammer
> >>
> >> As a first example:
> >>
> >> funcdef: ('def' NAME parameters ['->' test] ':' suite |
> >>           'def' NAME parameters ['->' test] '{' suite '}' )
> >>
> >> I reran Parser/pgen and the dfa changes, but python (3.1) when
> recompiled,
> >> throws errors on things like:
> >>
> >> def a() { None }
> >>
> >> Strangely enough:
> >>
> >> lambdef: ( 'lambda' [varargslist] ':' test  |
> >>                'lambda' [varargslist] '{' test '}' )
> >>
> >> works fine!  I this simplely some difference between "test" and "suite".
> >>
> >> I have tried tackling this with gdb, looking at err_input clearly isn't
> >> enough.
> >>
> >>     (gdb) break err_input
> >>     (gdb) break PyParser_ASTFromString
> >>     import sys
> >>     b = compile("def a() {pass}","sys.stdout","single")
> >>     # yet a simple grammar fix is enough for this!
> >>     c = compile("lambda x {None}","sys.stdout","single")
> >>
> >> I'm in over my head!
> >
> > You don't say what errors occur when you try to compile strings in
> > your new language.  You may have changed the Grammar, which allows you
> > to tokenize the input.  That isn't enough to get the input to compile.
> >  You also need to change the compiler to understand the new tokens.
>
> In particular, many AST creation functions check for specific counts of
> children on many nodes.   I haven't checked, but in the case of the
> "funcdef" rule, it may check for either 7 or 5 children to determine
> whether the optional return annotation ['->' test] is present.
>
> Georg
>
>
> --
> Thus spake the Lord: Thou shalt indent with four spaces. No more, no less.
> Four shall be the number of spaces thou shalt indent, and the number of thy
> indenting shall be four. Eight shalt thou not indent, nor either indent
> thou
> two, excepting that thou then proceed to four. Tabs are right out.
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/gregg.lind%40gmail.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20100331/2d78c295/attachment.html>


More information about the Python-Dev mailing list