2003-01-29 10:07:17 -05:00
|
|
|
|
PEP: 306
|
|
|
|
|
Title: How to Change Python's Grammar
|
|
|
|
|
Version: $Revision$
|
|
|
|
|
Last-Modified: $Date$
|
2007-03-01 17:39:00 -05:00
|
|
|
|
Author: Michael Hudson <mwh@python.net>, Jack Diederich <jackdied@gmail.com>, Nick Coghlan <ncoghlan@gmail.com>
|
2003-02-10 09:54:10 -05:00
|
|
|
|
Status: Active
|
2003-01-29 10:07:17 -05:00
|
|
|
|
Type: Informational
|
|
|
|
|
Content-Type: text/plain
|
|
|
|
|
Created: 29-Jan-2003
|
2003-01-30 10:22:56 -05:00
|
|
|
|
Post-History: 30-Jan-2003
|
2003-01-29 10:07:17 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
|
|
|
|
|
There's more to changing Python's grammar than editing
|
|
|
|
|
Grammar/Grammar and Python/compile.c. This PEP aims to be a
|
|
|
|
|
checklist of places that must also be fixed.
|
|
|
|
|
|
|
|
|
|
It is probably incomplete. If you see omissions, just add them if
|
|
|
|
|
you can -- you are not going to offend the author's sense of
|
|
|
|
|
ownership. Otherwise submit a bug or patch and assign it to mwh.
|
|
|
|
|
|
|
|
|
|
This PEP is not intended to be an instruction manual on Python
|
2003-01-30 05:27:45 -05:00
|
|
|
|
grammar hacking, for several reasons.
|
2003-01-29 10:07:17 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rationale
|
|
|
|
|
|
|
|
|
|
People are getting this wrong all the time; it took well over a
|
|
|
|
|
year before someone noticed[1] that adding the floor division
|
|
|
|
|
operator (//) broke the parser module.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Checklist
|
|
|
|
|
|
2007-03-01 17:39:00 -05:00
|
|
|
|
__ Grammar/Grammar: OK, you'd probably worked this one out :)
|
2003-01-29 10:07:17 -05:00
|
|
|
|
|
2007-03-01 17:39:00 -05:00
|
|
|
|
__ Parser/Python.asdl may need changes to match the Grammar.
|
|
|
|
|
Use Parser/asdl_c.py to regenerate Include/Python-ast.h
|
2003-01-29 10:07:17 -05:00
|
|
|
|
|
2007-03-01 17:39:00 -05:00
|
|
|
|
__ Python/Python-ast.c may need changes to create the AST
|
|
|
|
|
objects involved with the Grammar change. Lib/compiler/ast.py
|
|
|
|
|
will need matching changes to the pure-python AST objects.
|
|
|
|
|
|
|
|
|
|
__ Parser/pgen needs to be rerun to regenerate Include/graminit.h
|
|
|
|
|
and Python/graminit.c
|
|
|
|
|
|
|
|
|
|
__ Python/symbtable.c: This handles the symbol collection pass
|
|
|
|
|
that happens immediately before the compilation pass
|
|
|
|
|
|
|
|
|
|
__ Python/compile.c: You will need to create or modify the
|
|
|
|
|
compiler_* functions for your productions.
|
|
|
|
|
|
|
|
|
|
__ You may need to regenerate Lib/symbol.py and/or Lib/token.py
|
|
|
|
|
and/or Lib/keyword.py
|
2003-01-29 10:07:17 -05:00
|
|
|
|
|
|
|
|
|
__ The parser module. Add some of your new syntax to test_parser,
|
|
|
|
|
bang on parsermodule.c until it passes.
|
|
|
|
|
|
|
|
|
|
__ The compiler package. A good test is to compile the standard
|
|
|
|
|
library and test suite with the compiler package and then check
|
|
|
|
|
it runs. You did add some of your new syntax to the test
|
2007-03-01 17:39:00 -05:00
|
|
|
|
suite, didn't you?
|
2003-01-29 10:07:17 -05:00
|
|
|
|
|
2003-01-30 05:27:45 -05:00
|
|
|
|
__ If you've gone so far as to change the token structure of
|
2007-03-01 17:39:00 -05:00
|
|
|
|
Python, then the Lib/tokenizer.py library module will need to
|
|
|
|
|
be changed.
|
2003-01-30 05:27:45 -05:00
|
|
|
|
|
|
|
|
|
__ Certain changes may require tweaks to the library module
|
2004-02-19 12:00:32 -05:00
|
|
|
|
pyclbr.
|
2003-01-30 05:27:45 -05:00
|
|
|
|
|
2004-01-21 13:11:25 -05:00
|
|
|
|
__ Documentation must be written!
|
|
|
|
|
|
2007-04-16 13:08:51 -04:00
|
|
|
|
__ After everything's been checked in, you're likely to see a new
|
|
|
|
|
change to Python/Python-ast.c. This is because this
|
|
|
|
|
(generated) file contains the SVN version of the source from
|
|
|
|
|
which it was generated. There's no way to avoid this; you just
|
|
|
|
|
have to submit this file separately.
|
|
|
|
|
|
|
|
|
|
|
2003-01-29 10:07:17 -05:00
|
|
|
|
References
|
|
|
|
|
|
|
|
|
|
[1] SF Bug #676521, parser module validation failure
|
|
|
|
|
http://www.python.org/sf/676521
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Copyright
|
|
|
|
|
|
|
|
|
|
This document has been placed in the public domain.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: indented-text
|
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
|
sentence-end-double-space: t
|
|
|
|
|
fill-column: 70
|
|
|
|
|
End:
|