Langage de programmation expérimental inspiré de Python.
Project description
Contexte
Pylpex est un langage de programmation expérimental conçu pour explorer la création d’un interpréteur de code.
Inspiré de Python pour sa simplicité syntaxique, il remplace entre autres l’indentation par des accolades{}à la manière du C ou du JavaScript pour structurer le code. Ce projet a une visée pédagogique : comprendre les étapes fondamentales de la conception d’un langage.
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+
- uv – un gestionnaire rapide pour Python, compatible avec
pyproject.toml.
1. Depuis PyPI
pip install pylpex
# ou
uv add pylpex
2. En développement local
Pour tester le package depuis le dépôt source :
git clone https://github.com/Golto/pylpex.git
cd pylpex
uv pip install -e .
Cela installe le package en mode editable (-e) afin de pouvoir le modifier sans réinstallation.
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
Si vous êtes à la racine du projet, sinon vous pouvez aussi utiliser :
uv run pylpex
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 pylpex 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)
print(result) # 8
Évaluer une expression simple
from pylpex.utils import evaluate
result = evaluate("2 + 2")
print(result) # 4
Parser ou tokenizer seulement
from pylpex.utils import parse, tokenize
ast = parse("x = 5")
tokens = tokenize("x = 5")
print(ast)
print(tokens)
Conserver l’état entre plusieurs exécutions
from pylpex import Interpreter
interpreter = Interpreter()
interpreter.evaluate("x = 10")
interpreter.evaluate("y = x + 5")
print(interpreter.get_variable("y")) # 15
Exécuter un fichier
from pylpex 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.1.1.tar.gz.
File metadata
- Download URL: pylpex-1.1.1.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e1355201335cb9ba519b2e5a077f8cc7f9b4e83ca61988eb1f134959d1471a2
|
|
| MD5 |
384c6ceb1efbed9d486df09bd6ed086b
|
|
| BLAKE2b-256 |
627fcb78466643cc5020c0390ada49860991e51daefdb6ca4cf7d13e8654e446
|
File details
Details for the file pylpex-1.1.1-py3-none-any.whl.
File metadata
- Download URL: pylpex-1.1.1-py3-none-any.whl
- Upload date:
- Size: 34.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c125b362f12123877ee224a3a19a7a1c0736e40d24ae44b28fe33736b09b40c1
|
|
| MD5 |
ce9d0ee6ab6b017dfd947660253320e6
|
|
| BLAKE2b-256 |
056e8c96d75d258c5ca54635286fcb30dff06e27c8664f4259181ca69670af10
|