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

Gregg Lind gregg.lind at gmail.com
Sat Mar 6 17:27:46 CET 2010


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!

Any insights / help would be appreciated.  Full-on flaming is also
appropriate, but would be less appreciated.

Specific questions

1.)  I assume the Grammar/grammar is read top to bottom.  Confirm?
2.)  More help figuring out how to debug what python *thinks* it's seeing
when it see "def a() {pass}".  It's not getting to the ast construction
stage, as near as I can tell.  What additional breakpoints can I set to see
where it's failing.

Gregg L.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20100306/1f13f9fd/attachment-0001.html>


More information about the Python-Dev mailing list