Argh, my head hurts ! :P I need some help with the Python Grammar. Or rather, the Parser. I'm trying to add some new syntax to the current CVS snapshot, something Guido said he would like to see: built-in 'range'-like list creation, so that '[1:10]' is the same as 'range(1,10)'. The code isn't the problem, that's all done and it all works, but the problem is that it somehow broke normal list literals ! :-P Here's what I did. The current definition of 'atom' is: atom: '(' [testlist] ')' | '[' [testlist] ']' | << ... >> testlist: test (',' test)* [','] I tried adding it like this: atom: '(' [testlist] ')' | '[' [listmaker] ']' | << ... >> testlist: test (',' test)* [','] listmaker: testlist | rangemaker rangemaker: [test] ':' test And as I said, it works -- for the new syntax. But not for the old one. When I start the interpreter, here's what I see: XXX ambiguity! [snip] XXX ambiguity! 'import site' failed; traceback: File "./Lib/site.py", line 93 prefixes = [sys.prefix] ^ >>> [2:20] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] >>> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] File "<stdin>", line 1 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] ^ SyntaxError: invalid syntax So, for some reason it doesn't recognize the old list literals als valid syntax. And it probably has to do with ambiguity ;) But I can't, for the life of me, figure out what's so ambiguous about it. As far as I can tell, a bare 'test' can't be a ':', and 'rangemaker' always needs a ':'. Is this some kind of limitation in the Parser that I need to work around ? I tried reading the parser code, and I'm glad my head is reattached ;P Hints-greatly-appreciated-ly y'rs, -- Thomas Wouters <thomas@xs4all.net> Hi! I'm a .signature virus! copy me into your .signature file to help me spread!
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4