A Python framework for creating compilers that target the Varphi language
Project description
Varphi Development Kit
A Python framework for creating compilers that target the Varphi language - a domain-specific language for describing Turing machine transition rules.
Overview
Varphi is a minimalist language designed to represent Turing machine programs using simple transition rules. The Varphi Development Kit provides a flexible compiler framework that allows you to build custom compilers to transform Varphi programs into any target format.
Installation
pip install varphi-devkit
Requirements:
- Python ≥ 3.10
Varphi Language Syntax
Varphi programs consist of transition rules with the following syntax:
STATE TAPE_CHARACTER STATE TAPE_CHARACTER HEAD_DIRECTION
Where:
- STATE: Current/target state (format:
qfollowed by alphanumeric characters, e.g.,q0,q_start,q1_accept) - TAPE_CHARACTER: Tape symbol (
0for blank,1for marked) - HEAD_DIRECTION: Head movement (
Lfor left,Rfor right)
Example Varphi Program
// Simple addition-by-one program
q0 1 q0 1 R
q0 0 qHalt 1 R
Language Features
- Comments: Single-line (
//) and multi-line (/* */) comments are supported - Whitespace: Flexible whitespace handling (spaces, tabs, newlines)
- States: Flexible state naming with
qprefix
Core Architecture
The framework is built around these key components:
Data Model
VarphiTapeCharacter: Enum for tape symbols (BLANK="0",ONE="1")VarphiHeadDirection: Enum for head movement (LEFT="L",RIGHT="R")VarphiLine: Dataclass representing a transition rule with fields:if_state: Current stateif_condition: Current tape characterthen_state: Next statethen_character: Character to writethen_direction: Direction to move
Compiler Framework
VarphiCompiler: Abstract base class for implementing custom compilerscompile_varphi(): Function to parse and compile Varphi programsVarphiSyntaxError: Exception for syntax errors
Usage
Creating a Custom Compiler
To create a Varphi compiler, subclass VarphiCompiler and implement three methods:
from varphi_devkit import VarphiCompiler, VarphiLine, compile_varphi
class MyCompiler(VarphiCompiler):
def __init__(self):
# Initialize your compiler's state
self.output = []
def handle_line(self, line: VarphiLine):
# Process each transition rule
self.output.append(f"Transition: {line.if_state} -> {line.then_state}")
def generate_compiled_program(self) -> str:
# Return the final compiled output
return "\n".join(self.output)
# Use your compiler
program = """
q0 0 q1 1 R
q1 1 q_halt 0 L
"""
compiler = MyCompiler()
result = compile_varphi(program, compiler)
print(result)
Example Toy Compilers
The framework's test suite includes several example compilers that demonstrate different use cases.
Error Handling
The framework provides comprehensive syntax error reporting out of the box:
from varphi_devkit import VarphiSyntaxError, compile_varphi
from your_compiler import YourCompiler
try:
result = compile_varphi("invalid syntax here", YourCompiler())
except VarphiSyntaxError as e:
print(f"Syntax error at line {e.line}, column {e.column}: {e.message}")
API Reference
Core Functions
compile_varphi(program: str, compiler: VarphiCompiler) -> str
Parses and compiles a Varphi program using the provided compiler.
- Parameters:
program: Varphi source code as a stringcompiler: VarphiCompiler instance to process the program
- Returns: Compiled program output from the compiler
- Raises:
VarphiSyntaxErrorfor invalid syntax
Abstract Base Class
VarphiCompiler
Abstract base class for implementing custom Varphi compilers.
Abstract Methods:
__init__(self) -> None: Initialize compiler statehandle_line(self, line: VarphiLine) -> None: Process a transition rule (line in the Varphi program)generate_compiled_program(self) -> str: Return final compiled output
Data Classes
VarphiLine
Represents a single transition rule with attributes:
if_state: str- Current stateif_condition: VarphiTapeCharacter- Current tape characterthen_state: str- Next statethen_character: VarphiTapeCharacter- Character to writethen_direction: VarphiHeadDirection- Head movement direction
VarphiTapeCharacter
Enum for tape characters:
BLANK = "0"- Empty tape cellONE = "1"- Marked tape cell
VarphiHeadDirection
Enum for head movement:
LEFT = "L"- Move head leftRIGHT = "R"- Move head right
Exceptions
VarphiSyntaxError
Exception raised for syntax errors in Varphi programs.
Attributes:
message: str- Error descriptionline: int- Line number where error occurredcolumn: int- Column position of error
License
This project is available under the BSD-3-Clause License (see LICENSE).
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 varphi_devkit-1.0.0.tar.gz.
File metadata
- Download URL: varphi_devkit-1.0.0.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19485faf37907498968ccbd456d19ad16ce77c4b0208c11c4b704a3cb7bf5c66
|
|
| MD5 |
32491f078b53dea4664046b85dd6288e
|
|
| BLAKE2b-256 |
b58f7b91b973c65aa64777d3d0797052cb0966efdd4692888adf5fc9e8e86472
|
File details
Details for the file varphi_devkit-1.0.0-py3-none-any.whl.
File metadata
- Download URL: varphi_devkit-1.0.0-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30fee8a74ef3a658e065eec94455b8e4f7aa3491a2cd5079efd4c891b976c91a
|
|
| MD5 |
e4c26881c5689d050bfcaa3fc0e9127c
|
|
| BLAKE2b-256 |
af23fc7281f4369410c478db539f6291a41a94093cae126731df39944bf24370
|