A Python package for generating Abstract Syntax Trees for VEX V5 code.
Project description
VEX AST Generator
A Python package for generating Abstract Syntax Trees (ASTs) for VEX V5 Robot Python code.
Project Goal
The primary goal of this project is to provide a robust and extensible framework for parsing VEX V5 Python code and representing it as an Abstract Syntax Tree (AST). This AST can then be used for various purposes, such as static analysis, code transformation, simulation, or integration with other development tools specific to the VEX ecosystem.
Features (Implemented)
- Parsing of standard Python syntax relevant to VEX programming.
- Generation of a well-defined AST structure using custom node types.
- Representation of core Python constructs (variables, functions, loops, conditionals, expressions).
- Specific AST nodes for common VEX API patterns (e.g.,
MotorControl,SensorReading). - Visitor pattern implementation (
vex_ast.visitors) for easy AST traversal and manipulation. - Basic analysis visitors (
NodeCounter,VariableCollector). - AST pretty-printing visitor (
PrintVisitor). - Error handling and reporting with source location information (
vex_ast.utils). - JSON serialization and deserialization of AST nodes (
vex_ast.serialization). - JSON Schema generation for AST structure validation and documentation.
Library Structure
The core library is within the vex_ast directory:
vex_ast/ast/: Defines the structure and node types of the Abstract Syntax Tree.vex_ast/parser/: Contains the logic for parsing Python source code into the AST.vex_ast/visitors/: Provides tools for traversing and analyzing the generated AST.vex_ast/utils/: Includes helper modules for error handling and source location tracking.
Setup
-
Clone the repository:
git clone https://github.com/heartx2/vex_ast # Replace with actual URL cd vex_ast
-
Create and activate a virtual environment:
python3 -m venv .venv source .venv/bin/activate # On Windows use `.venv\Scripts\activate`
-
Install dependencies:
pip install -r requirements.txt
-
(Optional) Install for development: If you plan to contribute to the project, install it in editable mode along with development dependencies:
pip install -e .[dev]
Usage Example
Basic Parsing and Printing
from vex_ast import parse_string
from vex_ast.visitors.printer import PrintVisitor
# VEX-like Python code
code = """
left_motor = Motor("port1")
right_motor = Motor("port10")
def drive_forward(speed_percent):
left_motor.spin(FORWARD, speed_percent, PERCENT)
right_motor.spin(FORWARD, speed_percent, PERCENT)
wait(1, SECONDS)
left_motor.stop()
right_motor.stop()
drive_forward(50)
print("Movement complete!")
"""
try:
# Parse the code string into an AST
ast_tree = parse_string(code)
# Use the PrintVisitor to get a textual representation of the AST
printer = PrintVisitor()
ast_representation = printer.visit(ast_tree)
print("--- AST Representation ---")
print(ast_representation)
except Exception as e:
print(f"An error occurred: {e}")
Serialization and Deserialization
from vex_ast import (
parse_string,
serialize_ast_to_json,
deserialize_ast_from_json,
export_schema_to_file
)
# Parse code into an AST
code = "x = 10 + 20"
ast = parse_string(code)
# Serialize the AST to JSON
json_str = serialize_ast_to_json(ast, indent=2)
print(json_str)
# Save the AST to a file
with open("ast.json", "w") as f:
f.write(json_str)
# Later, load the AST from JSON
with open("ast.json", "r") as f:
loaded_json = f.read()
# Deserialize back to an AST object
loaded_ast = deserialize_ast_from_json(loaded_json)
# Generate and export a JSON schema
export_schema_to_file("ast_schema.json")
Development
Running Tests
pytest
Type Checking
mypy vex_ast
Formatting and Linting
black vex_ast tests
flake8 vex_ast tests
Contributing
Contributions are welcome! Please follow the established coding standards and ensure tests pass before submitting a pull request.
License
HX2's Vex AST © 2025 by charkwayteowy is licensed under CC BY-NC 4.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vex_ast-0.2.2.tar.gz.
File metadata
- Download URL: vex_ast-0.2.2.tar.gz
- Upload date:
- Size: 62.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bc1f3ebf9796042b8ecae9553af66b6d37386053bbc2b6e947cf697417161ae
|
|
| MD5 |
929a95c3771e83686527e1b0108b032e
|
|
| BLAKE2b-256 |
0cc9985a22f7693a3a52d4d86324d0338c5e1fae0e49d26db99541d9cbcfd577
|
File details
Details for the file vex_ast-0.2.2-py3-none-any.whl.
File metadata
- Download URL: vex_ast-0.2.2-py3-none-any.whl
- Upload date:
- Size: 73.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c92ddcef7492724757d43a7f39f90feb837d022fdc801408548bfe6c5c225ea
|
|
| MD5 |
ff038932fdf8ac84b88c74a8e913d62f
|
|
| BLAKE2b-256 |
fdb8691c139c823c6761e3b20e6bedb0e8f42cd0249e3a79e585f8a01e6ca394
|