Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zbraniecki/pyast

Basic set of classes for building abstract syntax trees
https://github.com/zbraniecki/pyast

Last synced: 3 months ago
JSON representation

Basic set of classes for building abstract syntax trees

Awesome Lists containing this project

README

        

PyAST is a library that allows for creating AST structures using declarative programming form.

example:

== jsast.py ==

import pyast as ast

class Node(ast.Node):
pass

class Statement(Node):
pass

class Expression(Pattern):
pass

class Operator(Node):
token = ast.field(("+","=","-","==","!=",">",">"))

class Identifier(Expression):
name = ast.field((str, unicode))

class Literal(Expression):
value = ast.field((str, bool, int, NoneType))

class Program(ast.Node):
body = ast.seq(Statement, null=True)

class ExpressionStatement(Statement):
expression = ast.field(Expression)

class AssignmentExpression(Expression):
operator = ast.field(Operator)
left = ast.field(Expression)
right = ast.field(Expression)

== main.py ==

from jsast import *

prog = Program()
prog.body.append(
ExpressionStatement(
AssignmentExpression(
Operator("="),
Identifier("x"),
Literal(2)
)))

# result: x=2;
=========

pyast.DEBUG variable defines if pyast operates in DEBUG mode in which the
strong typing is enforced at cost of performance, or optimized mode when all
the checks are inactive.