API del Transpiler
API del Transpiler
Sección titulada «API del Transpiler»El transpiler de PyGo convierte archivos .pgo en código Python equivalente (gen_py) y Go (gen_go) utilizando un visitor de AST de Python.
AST Visitor
Sección titulada «AST Visitor»El transpiler usa el módulo ast de Python para parsear archivos .pgo en un Árbol de Sintaxis Abstracta (AST), luego recorre el árbol para generar el código de salida.
Clases Principales
Sección titulada «Clases Principales»ASTVisitor
Sección titulada «ASTVisitor»Clase base de visitor AST que maneja todos los tipos de nodos AST de Python.
from pygo.transpiler import ASTVisitor
visitor = ASTVisitor()visitor.visit(ast.parse(source_code))PyGenerator(ASTVisitor)
Sección titulada «PyGenerator(ASTVisitor)»Genera código Python 1:1.
from pygo.transpiler import PyGenerator
gen = PyGenerator()gen.visit(tree)output = gen.get_output()GoGenerator(ASTVisitor)
Sección titulada «GoGenerator(ASTVisitor)»Genera mecánicamente código Go.
from pygo.transpiler import GoGenerator
gen = GoGenerator()gen.visit(tree)output = gen.get_output()Tipos de Nodos AST Soportados
Sección titulada «Tipos de Nodos AST Soportados»El transpiler soporta todos los tipos de nodos AST estándar de Python:
| Tipo de Nodo | Descripción | Equivalente Go |
|---|---|---|
Module |
Módulo de nivel superior | package main |
ClassDef |
Definición de clase | type ... struct |
FunctionDef |
Definición de función | func ... |
Assign |
Asignación | := o = |
If |
Condicional | if ... {} |
For |
Bucle for | for ... {} |
While |
Bucle while | for ... {} |
Return |
Instrucción return | return ... |
Call |
Llamada a función | func(args) |
IfExp |
Expresión ternaria | cond ? a : b |
ListComp |
Comprensión de listas | func() []T { for ... } |
DictComp |
Comprensión de diccionarios | make(map[K]V); for ... |
Mapeo de Tipos
Sección titulada «Mapeo de Tipos»El transpiler mapea tipos Python a tipos Go de manera determinista:
| Tipo Python / PyGo | Tipo Go |
|---|---|
str |
string |
int |
int |
float |
float64 |
bool |
bool |
list[T] / Array[T] |
[]T |
dict[K, V] / Map[K, V] |
map[K]V |
UUID |
uuid.UUID |
Email |
string |
DateTime |
time.Time |
Optional[T] |
*T |
Enum |
type ... int |
Directivas
Sección titulada «Directivas»Directivas específicas de PyGo pueden incrustarse en archivos .pgo:
Marca una clase para generación de modelo de base de datos.
@modelclass User: name: str email: EmailRegistra una función como manejador HTTP.
@route("/users")def list_users(): return User.all()Personaliza un campo de modelo.
@modelclass User: name: str = field(max_length=100, unique=True) email: Email = field(index=True)Configuración
Sección titulada «Configuración»from pygo.transpiler import Transpiler
transpiler = Transpiler( py_output_dir="./pygo_py", go_output_dir="./pygo_go", verbose=True)
transpiler.process_file("app.pgo")transpiler.process_directory("./models")Sistema de Plugins
Sección titulada «Sistema de Plugins»Se pueden registrar visitors AST personalizados:
from pygo.transpiler import register_visitor
@register_visitorclass CustomVisitor(ast.NodeVisitor): def visit_Call(self, node): # Manejo personalizado passManejo de Errores
Sección titulada «Manejo de Errores»El transpiler lanza TranspilerError para sintaxis no soportada:
try: transpiler.process_file("app.pgo")except TranspilerError as e: print(f"Error de transpiler en línea {e.line}: {e.message}")Integración CLI
Sección titulada «Integración CLI»El transpiler se invoca desde la CLI:
pygo gen-py app.pgo --output ./pygo_pypygo gen-go app.pgo --output ./pygo_gopygo transpile app.pgo --py-output ./pygo_py --go-output ./pygo_go