python-peps/pep-0306.txt

101 lines
3.2 KiB
Plaintext
Raw Normal View History

2003-01-29 10:07:17 -05:00
PEP: 306
Title: How to Change Python's Grammar
Version: $Revision$
Last-Modified: $Date$
2008-12-29 18:08:17 -05:00
Author: Michael Hudson <mwh@python.net>, Jack Diederich <jackdied@gmail.com>, Nick Coghlan <ncoghlan@gmail.com>, Benjamin Peterson <benjamin@python.org>
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
2008-11-03 10:28:02 -05:00
__ Grammar/Grammar: OK, you'd probably worked this one out :)
2003-01-29 10:07:17 -05:00
2008-11-03 10:28:02 -05:00
__ Parser/Python.asdl may need changes to match the Grammar. Run
make to regenerate Include/Python-ast.h and
Python/Python-ast.c.
2003-01-29 10:07:17 -05:00
2008-11-03 10:28:02 -05:00
__ Python/ast.c will 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
2008-11-03 10:28:02 -05:00
and Python/graminit.c. (make should handle this for you.)
__ Python/symbtable.c: This handles the symbol collection pass
2008-11-03 10:28:02 -05:00
that happens immediately before the compilation pass.
__ Python/compile.c: You will need to create or modify the
2008-11-03 10:28:02 -05:00
compiler_* functions to generate opcodes for your productions.
__ You may need to regenerate Lib/symbol.py and/or Lib/token.py
2008-11-03 10:28:02 -05:00
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,
2008-11-03 10:28:02 -05:00
bang on Modules/parsermodule.c until it passes.
__ Add some usage of your new syntax to test_grammar.py
2003-01-29 10:07:17 -05:00
__ The compiler package. A good test is to compile the standard
library and test suite with the compiler package and then check
2008-11-03 10:28:02 -05:00
it runs. Note that this only needs to be done in Python 2.x.
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
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!
__ 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: