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.
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com