Skip to content
This repository has been archived by the owner on Aug 11, 2024. It is now read-only.
/ Astley Public archive

Extensions to Python's Abstract Syntax Tree

Notifications You must be signed in to change notification settings

yunruse/Astley

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Astley

Astley is a module designed for manipulating Python's Abstract Syntax tree. It features:

  • An extended node syntax, allowing for nodes to be created via (mostly) native syntax;
  • The ability to print out nodes as Python code - useful for transpilation.

Astley is more of a toy than anything – there are many ways it could be useful, but that would require a lot more time than I can afford. Still, it's functional, and should hopefully work on most versions of Python 3.

Usage

Create code with native syntax, fast:

>>> from astley import parse, f, x, y
>>> code = 'f(x**2 + y, end="!")'
>>> node1 = parse(code, mode='eval')
>>> node2 = f(x**2 + y, end="!")
>>> print(node1.as_python(), node2.as_python())
f(x ** 2 + y, end='!') f(x ** 2 + y, end='!')
>>> node1 == node2
True
>>> node2.eval(f=print, x=10, y=4)
104!

For the most part all operators 'just work' on any node. For certain operators, however – ., == and != – there's no easy way to realise this, so instead use ._., ._== and ._!= instead.

>>> from astley import x, y
>>> node = x._.y ._== 2
>>> print(node.as_python())
x.y == 2

Legal

Copyright (c) Mia Dobson (yunruse) 2018-2021.

This work is licensed under a Creative Commons Attribution 4.0 International license. In non-legal terms: do whatever you like, but credit me. The full license is available here: https://creativecommons.org/licenses/by/4.0/

About

Extensions to Python's Abstract Syntax Tree

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages