replacing `import` with `accio` in cpython
DESCRIPTION
Replacing `import` with `accio`: Compiling Pythons with Custom Grammar for the sake of a joke! These are the slides from my 03/25/14 talk at NYC Hack and Tell.TRANSCRIPT
![Page 1: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/1.jpg)
replacing import with accio in CPython
![Page 2: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/2.jpg)
>>> import sys!>>> accio sys!SyntaxError
![Page 3: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/3.jpg)
>>> import sys!>>> accio sys!SyntaxError
![Page 4: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/4.jpg)
>>> import sys!>>> accio sys!SyntaxError
![Page 5: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/5.jpg)
>>> accio sys!>>> import sys!SyntaxError
![Page 6: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/6.jpg)
>>> accio sys!>>> import sys!SyntaxError
![Page 7: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/7.jpg)
>>> accio sys!>>> import sys!SyntaxError
![Page 8: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/8.jpg)
why?
![Page 9: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/9.jpg)
we’ll learn:!what is a statement
![Page 10: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/10.jpg)
we’ll learn:!what is a
SyntaxError
![Page 11: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/11.jpg)
we’ll learn:!how does
Python know the difference?
![Page 12: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/12.jpg)
we’ll learn:!bootstrapping
!
![Page 13: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/13.jpg)
replacing import with
accio
![Page 14: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/14.jpg)
import is a statement
![Page 15: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/15.jpg)
statements are defined in the Grammar!
file
![Page 16: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/16.jpg)
import_stmt: ! import_name | ! import_from
![Page 17: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/17.jpg)
import_name: ! ‘import’ ! dotted_as_names
![Page 18: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/18.jpg)
first attempt
![Page 19: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/19.jpg)
import_name: ! ‘accio’ ! dotted_as_names
![Page 20: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/20.jpg)
$ make
![Page 21: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/21.jpg)
import sys! ^!SyntaxError: invalid syntax
![Page 22: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/22.jpg)
oops
![Page 23: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/23.jpg)
second attempt
![Page 24: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/24.jpg)
$ sed ’s/import/accio’
![Page 25: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/25.jpg)
$ make
![Page 26: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/26.jpg)
accio sys! ^!SyntaxError: invalid syntax
![Page 27: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/27.jpg)
bootstrapping!
![Page 28: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/28.jpg)
third attempt
![Page 29: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/29.jpg)
import_name: ! ‘import’ ! dotted_as_names! | ‘accio’ ! dotted_as_names
![Page 30: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/30.jpg)
$ make
![Page 31: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/31.jpg)
$PATH
![Page 32: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/32.jpg)
import_name: ! ‘accio’ ! dotted_as_names
![Page 33: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/33.jpg)
$ sed ’s/import/accio’
![Page 34: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/34.jpg)
$ make
![Page 35: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/35.jpg)
>>> accio sys!>>> import sys!SyntaxError
![Page 36: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/36.jpg)
>>> accio sys!>>> import sys!SyntaxError
![Page 37: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/37.jpg)
>>> accio sys!>>> import sys!SyntaxError!
![Page 38: Replacing `import` with `accio` in cpython](https://reader033.vdocument.in/reader033/viewer/2022052908/5595faa61a28abb1548b4683/html5/thumbnails/38.jpg)
links• Grammar - https://docs.python.org/2/reference/
grammar.html
• EBNF - http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
• Adding a statement - http://eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/