Introducción
PYTHON 2 v1.0 es un lenguaje/meta-lenguaje personalizado que permite escribir código en archivos .py2 y transpilarlo a Python, JavaScript, C++, C# y C.
Incluye un lenguaje propio llamado MITH, un sistema de mods con funciones extra y customize functions extensibles.
Instalación
Requisitos
- Python 3.8 o superior
- (Opcional) Node.js + npx para desplegar con Wrangler
Instalar desde el repositorio
git clone https://github.com/python2-lang/python2.git
cd python2
python3 main.py examples/ejemplo.py2 python
Verificar instalación
python3 tests/run_tests.py
Primeros pasos
Crea un archivo llamado hola.py2 con este contenido:
MITH.LENGUAJE castellano
castellano.NOT.MITHLENGUAJE({
imprimir "Hola mundo";
execute languaje;
})
Ejecútalo con:
python3 main.py hola.py2 python
Sintaxis básica
Variables y constantes
version = 1.0
nombre = "PYTHON 2"
activo = true
constante PI = 3.14159
constante AUTOR = "Equipo PYTHON 2"
Funciones
def suma(a: int, b: int): int {
return a + b
}
fn saludar(nombre: string) {
imprimir "Hola, " + nombre
}
function factorial(n) {
if n <= 1 {
return 1
}
return n * factorial(n - 1)
}
Condicionales
if x > 0 {
imprimir "positivo"
} elif x == 0 {
imprimir "cero"
} else {
imprimir "negativo"
}
Bucles
i = 0
while i < 10 {
imprimir i
i = i + 1
}
for n in lista {
imprimir n
}
Clases
class Persona {
nombre: string
edad: int
def constructor(n: string, e: int) {
this.nombre = n
this.edad = e
}
def presentarse() {
return "Soy " + this.nombre
}
}
Lenguaje MITH
MITH permite definir secciones de código personalizadas que se transpilan al target activo.
MITH.LENGUAJE castellano
castellano.NOT.MITHLENGUAJE({
variable x = 10;
constante MAX = 100;
imprimir "Hola desde MITH";
si x > 0 entonces
imprimir "Positivo";
sino
imprimir "No positivo";
fin;
mientras x < MAX hacer
imprimir x;
asignar x = x + 10;
fin;
funcion duplicar(n) hacer
retornar n * 2;
fin;
lista numeros = 1, 2, duplicar(5);
diccionario config = "modo":"prod", "debug":false;
sumar 5, 3, 2;
multiplicar 4, 5;
execute languaje;
})
Instrucciones MITH disponibles
variable nombre = valor;Declara variableconstante N = valor;Declara constanteimprimir "texto";Muestra en consolaasignar x = y;Asigna valorsumar a, b, c;Suma valoresrestar a, b;Resta valoresmultiplicar a, b;Multiplica valoresdividir a, b;Divide valoresmodulo a, b;Módulosi cond entonces ... fin;Condicionalmientras cond hacer ... fin;Bucle whilefuncion f(a) hacer ... fin;Funciónlista x = 1, 2, 3;Listadiccionario x = "k":"v";Diccionarioimportar modulo;Importaciónexecute languaje;Ejecuta secciónTargets soportados
| Target | Comando | Salida | Ideal para |
|---|---|---|---|
| Python | python3 main.py app.py2 python | app.py | Scripts, IA, backend |
| JavaScript | python3 main.py app.py2 js | app.js | Web, Node.js |
| C++ | python3 main.py app.py2 cpp | app.cpp | Alto rendimiento |
| C# | python3 main.py app.py2 csharp | app.cs | .NET, escritorio |
| C | python3 main.py app.py2 c | app.c | Embeded, sistemas |
Mods incluidos
Al usar import python2_commandfunctionfact:IN_USE se cargan automáticamente:
mod_standard
Funciones base como hola_mundo, version y ayuda.
mod_math
Matemáticas: suma, potencia, raíz, fibonacci, primos, factorial.
mod_io
Lectura/escritura de archivos, directorios y entrada de usuario.
mod_net
HTTP GET/POST, archivos, JSON y utilidades de red.
mod_os
Información del sistema, variables de entorno y procesos.
mod_string
Manipulación de cadenas: mayúsculas, división, búsqueda, formato.
mod_data
Listas, diccionarios, ordenamientos y rangos.
mod_time
Fechas, timestamps, cronómetros y formateo.
mod_crypto
Hashing MD5, SHA1, SHA256, SHA512 y Base64.
Errores comunes
SyntaxError: Esperado IDENTIFICADOR
Revisa que los nombres de variables y funciones no usen palabras reservadas como function o class.
El bloque MITH no genera código
Verifica que hayas declarado el lenguaje con MITH.LENGUAJE nombre antes de usar nombre.NOT.MITHLENGUAJE({...}).
Los mods no se cargan
Asegúrate de incluir import python2_commandfunctionfact:IN_USE antes de usar customize functions.
Preguntas y respuestas
PYTHON 2 es un lenguaje/meta-lenguaje personalizado que transpila código .py2 a Python, JavaScript, C++, C# y C. Incluye el lenguaje propio MITH y un sistema de mods.
No necesariamente. La sintaxis está inspirada en Python, JavaScript y C, pero puedes crear tu propio lenguaje MITH y escribir código de forma personalizada.
Crea un generador en targets/nuevo/generator.py que herede de BaseGenerator e implemente el método generar(). Luego regístralo en mith/interpreter.py.
Crea un archivo en mods/mod_tuyo.py, define tus funciones y expón un diccionario CUSTOMIZE_FUNCTIONS. Se cargará automáticamente con IN_USE.
El token nunca debe guardarse en el repositorio. Usa la variable de entorno CLOUDFLARE_API_TOKEN_ELI o un archivo .env ignorado por git.
Sí. Primero define el lenguaje con MITH.LENGUAJE castellano y luego invoca castellano.NOT.MITHLENGUAJE({ ... }).
Ejecuta python3 main.py --repl python. Escribe líneas de PYTHON 2, usa :target para cambiar de target y :salir para salir.
Sí. En la página principal hay una sección "Probar online" donde puedes escribir código MITH, elegir un target y ver la salida generada.
Haz tu propia pregunta
Si no encuentras respuesta, agrega tu pregunta. Si conoces la respuesta, compártela para ayudar a otros.
Las preguntas se guardan temporalmente en el navegador mediante localStorage.
Ejemplos avanzados .py2
Calculadora con MITH
MITH.LENGUAJE calc
calc.NOT.MITHLENGUAJE({
variable a = 10;
variable b = 3;
sumar a, b;
restar a, b;
multiplicar a, b;
dividir a, b;
execute languaje;
})
Fibonacci hasta N
import python2_commandfunctionfact:IN_USE
fn fib(n: int): int {
if n <= 1 {
return n
}
return fib(n - 1) + fib(n - 2)
}
i = 0
while i < 10 {
imprimir fib(i)
i = i + 1
}
Petición HTTP con mod_net
import python2_commandfunctionfact:IN_USE
import mod_net
respuesta = net_get("https://api.example.com/datos")
imprimir respuesta.status
imprimir respuesta.json()
Hash SHA256 con mod_crypto
import python2_commandfunctionfact:IN_USE
import mod_crypto
mensaje = "PYTHON 2 es genial"
hash = crypto_sha256(mensaje)
imprimir hash
Soporte
Si no encuentras respuesta, revisa los recursos oficiales: