Langage de programmation expérimental inspiré de Python.
Project description
Contexte
Pylpex est un langage de programmation expérimental conçu comme un langage "jouet" pour explorer la conception d'un interpréteur de code. Il reprend la simplicité syntaxique de Python, tout en introduisant une approche à base d’accolades {} pour structurer le code — à la manière du C ou du JavaScript et en remplacement de l’indentation de Python.
Le projet à une visée pédagogique et ne cherche pas à une utilisation concrète. Il comprend les étapes clés de la création d’un langage de programmation :
-
la construction d’un lexer et d’un parser,
-
la représentation d’un arbre syntaxique (AST),
-
la gestion d’un environnement d’exécution,
-
et la conception d’un moteur d’interprétation complet.
📚 Table des matières
- Caractéristiques principales
- Installation
- Utilisation
- Syntaxe et concepts
- Exemples de code
- Architecture du projet
- Licence et auteur
✨ Caractéristiques principales
Pylpex supporte déjà la majorité des constructions d’un langage moderne :
- Types natifs : entiers, flottants, booléens, chaînes, listes, dictionnaires,
none - Structures de contrôle :
if,else,for,while,break,continue - Fonctions avec paramètres par défaut, variables locales, et portée lexicale
- Expressions ternaires :
x if cond else y - Opérateurs composés (
+=,-=, etc.) - Appels de fonction comme objets de première classe
🚀 Installation
Prérequis
- Python 3.13+ (recommandé)
- uv – un gestionnaire rapide pour Python, compatible avec
pyproject.toml.
Cloner le dépôt
git clone https://github.com/Golto/pylpex.git
cd pylpex
Créer l’environnement et installer les dépendances
Si vous n’avez pas encore installé uv :
pip install uv
Ensuite, dans le dossier du projet :
uv sync
Cela crée un environnement virtuel local et installe automatiquement les dépendances définies dans pyproject.toml.
Lancer le projet
uv run python main.py
💡 Astuce : Vous pouvez aussi activer l’environnement virtuel avant de lancer des commandes :
source .venv/bin/activate # sur Linux/macOS
# ou
.venv\Scripts\activate # sur Windows
💻 Utilisation
Pylpex peut s’utiliser de deux manières :
- Depuis la console interactive (REPL)
- Depuis un script Python, en important l’interpréteur
🧠 1. Mode interactif (REPL)
python main.py
Vous verrez apparaître :
🌀 Pylpex 1.0.0
Langage expérimental inspiré de Python
Tapez 'exit' pour quitter.
>>>
Exemple rapide
2 + sqrt(2)
Sortie :
3.414213562373095
Ce mode permet de tester rapidement du code Pylpex sans créer de fichier.
🧩 2. Intégration dans du code Python
Pylpex peut être utilisé comme librairie Python. Il expose une API simple pour tokeniser, parser et évaluer du code Pylpex :
from src import Interpreter
# Crée un interpréteur avec environnement persistant
interpreter = Interpreter()
code = """
function add(a, b) {
return a + b
}
print(add(5, 3))
"""
result = interpreter.evaluate(code)
Évaluer une expression simple
from src.utils import evaluate
result = evaluate("2 + 2")
print(result) # 4
Parser ou tokenizer seulement
from src.utils import parse, tokenize
ast = parse("x = 5")
tokens = tokenize("x = 5")
print(ast)
print(tokens)
Conserver l’état entre plusieurs exécutions
from src import Interpreter
interpreter = Interpreter()
interpreter.evaluate("x = 10")
interpreter.evaluate("y = x + 5")
print(interpreter.get_variable("y")) # 15
Exécuter un fichier
from src import Interpreter
interpreter = Interpreter()
with open("mon_script.txt", "r") as f:
code = f.read()
result = interpreter.eval(code)
📖 Syntaxe et concepts
Variables et types
x = 10
name = "Alice"
values = [1, 2, 3]
Conditions et boucles
// Condition
if x > 5 {
print("Grand")
} else {
print("Petit")
}
// Boucle for
for item in [1, 2, 3] {
print(item)
}
// Boucle while
count = 0
while count < 3 {
print(count)
count += 1
}
Fonctions
function greet(name = "World") {
print("Hello, " + name + "!")
}
greet()
greet("Alice")
Note : Vous pouvez consulter la documentation complète de la syntaxe pour plus de détails.
🧩 Exemples de code
Fibonacci
function fib(n) {
if n <= 1 {
return n
}
return fib(n-1) + fib(n-2)
}
fib(10)
Factorielle
function factorial(n) {
if n <= 1 {
return 1
} else {
return n * factorial(n-1)
}
}
factorial(5)
🏗️ Architecture du projet
Le cœur de Pylpex repose sur quatre composants :
| Composant | Rôle |
|---|---|
| Lexer | Découpe le code source en tokens |
| Parser | Transforme les tokens en arbre syntaxique (AST) |
| Evaluator | Exécute l’AST |
| Interpreter | Coordonne l’ensemble et conserve l’état |
Code source
↓
[Lexer] → Tokens
↓
[Parser] → AST
↓
[Evaluator] → Résultat
👤 Auteur et licence
- Auteur : Guillaume Foucaud
- Licence : MIT
- GitHub : @Golto
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 pylpex-1.0.0.tar.gz.
File metadata
- Download URL: pylpex-1.0.0.tar.gz
- Upload date:
- Size: 24.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac05d1064467fb8da0ac9c3bec85d3d2e9942b04e72ce525d4f13a83a74817da
|
|
| MD5 |
7b090ae4feec3069a92cb4c9a206d0a6
|
|
| BLAKE2b-256 |
f4f5946677917881e6e7b45ef7c5af4c8f568353951d168affdb6267f5dc7dbc
|
File details
Details for the file pylpex-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pylpex-1.0.0-py3-none-any.whl
- Upload date:
- Size: 27.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
333ea7dbdd65eb29ab0262dadd0bccb97bb9ad9beec2b83a924b2dde78d657fe
|
|
| MD5 |
f3e717f9d0dd686ca6772d5f5d85ae97
|
|
| BLAKE2b-256 |
6138d1a95e8fa04a3dea83450143136ed2419effc60c0dcdb77b6c32da2fb0a8
|