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.