[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