Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
-
Upload
python-meetup -
Category
Software
-
view
264 -
download
3
Transcript of Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
PYTHON AST
MODULE
Между исходным текстом и байткодом
Николай Карелин
Что это?
• Abstract Syntax Tree:
• Представление абстрактной структуры кода языка
программирования в виде дерева объектов
• В отличие от дерева разбора (parse tree) остаются только
элементы синтаксиса языка
Компиляция кода
• Python 2.5 и позже
• By Armin Ronacher
.py
Parse
Tree
CFG*
bytecode
AST
*CFG = Control Flow Graph
Пример 1
Module
FunctionDef
Name
Expr Pass
body
arguments
body
Module(
body=[
FunctionDef(name='func', args=arguments(
args=[Name(id='x', ctx=Param())],
vararg=None, kwarg=None,
defaults=[]),
body=[Expr(value=Str(s='My function')),
Pass()],
decorator_list=[])])
Str
valueParam
ctx
Пример 2
https://github.com/titusjan/astviewer
Attributes
Fields
Структура модуля• from _ast import *
• Часть С-кода
• Определение всех объектов
• Helper functions
• Получение
• Обработка
• Манипуляции
• Visitor/Transformer class prototypes
Иерархия объектовAST
comprehension
boolop cmpop
arguments excepthandler
alias expr_context
exprmod
operator
keyword
unaryopstmt slice
103 classes in total
Иерархия объектов
• Attribute, BinOp, BoolOp,
• Call, Compare, Dict,
• DictComp, GeneratorExp,
• IfExp, Lambda, List,
• ListComp, Name, Num,
• Repr, Set, SetComp,
• Str, Subscript, Tuple,
• UnaryOp, Yield
• Assert, Assign,
• AugAssign, Break,
• ClassDef, Continue, Delete,
• Exec, Expr, For,
• FunctionDef, Global,
• If, Import, ImportFrom,
• Pass, Print, Raise,
• Return, TryExcept,
• TryFinally, While, With
expr stmt
Синтаксис Python
Синтаксис Python
ASDL (Zephyr Abstract Syntax Definition Language) format
Использует Python скрипт для генерации C-кода ;)
Опционально0 или более
Примеры
• blaze, cffi, enaml, Ipython
• numpy (SafeEval), pandas, scipy.weave, sympy
• pep8, pip, pycparser pylint pyflakes rope
Применение: компиляция
• Numba, http://numba.pydata.org/
• HOPE, http://hope.phys.ethz.ch
• PyJS (Pyjamas), http://pyjs.org,
https://github.com/pyjs/pyjs
.py
Parse
Tree
CFG
bytecode
AST
LLVM
Visitor
GreenTreeSnakes
Свой язык в Python
• Hy ;)
.py
Parse
Tree
CFG
bytecode
AST
Создание AST
Hy: HyASTCompiler.compile()
Сode instrumenting
• Pyflakes, …
• Macros (http://www.pocoo.org/projects/karnickel/)
.py
Parse
Tree
CFG
bytecode
AST
?
numpy.utils.safe_eval()
…
См. также ast.literal_eval()
Осторожно!
There Might be Dragons!
AST - Предосторожности
• Странные ошибки (segfaults)
• Нет гарантии стабильности API
• Разная структура для
• 2.x <-> 3.x
• Разные версии ветки 3.x
• Cpython, PyPy, Jython, …
Что дальше
• Hacker’s Guide to Python
• PEP 339 / Python Dev. Guide
• Green Tree Snakes documentation,
https://greentreesnakes.readthedocs.org/en/latest/
• ast module documentation
• http://pyvideo.org/video/419/pycon-2011--what-would-you-
do-with-an-ast
• http://www.dalkescientific.com/writings/diary/archive/2010/
02/22/instrumenting_the_ast.html
Hacker’s Guide to Python
Table of contents
1. Starting your project
2. Modules and libraries
3. Documentation
4. Distribution
5. Virtual environments
6. Unit testing
7. Methods and decorators
8. Functional programming
9. The AST
10. Performances and optimizations
11. Scaling and architecture
12. RDBMS and ORM
13. Python 3 support strategies
14. Write less, code more
https://julien.danjou.info/books/the-hacker-guide-to-python
THE END
На будущее
• Sphinx и ReST для документирования проектов
• Python для численных расчетов (Numba, GPU, …)
• ctypesgen – обертки над внешними библиотеками
???
Ищется помощь по белорусификации
http://pymorphy2.readthedocs.org/en/latest/
https://github.com/kmike/pymorphy2