Skip to main content

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

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 :

  1. Depuis la console interactive (REPL)
  2. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylpex-1.0.0.tar.gz (24.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pylpex-1.0.0-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

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

Hashes for pylpex-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ac05d1064467fb8da0ac9c3bec85d3d2e9942b04e72ce525d4f13a83a74817da
MD5 7b090ae4feec3069a92cb4c9a206d0a6
BLAKE2b-256 f4f5946677917881e6e7b45ef7c5af4c8f568353951d168affdb6267f5dc7dbc

See more details on using hashes here.

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

Hashes for pylpex-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 333ea7dbdd65eb29ab0262dadd0bccb97bb9ad9beec2b83a924b2dde78d657fe
MD5 f3e717f9d0dd686ca6772d5f5d85ae97
BLAKE2b-256 6138d1a95e8fa04a3dea83450143136ed2419effc60c0dcdb77b6c32da2fb0a8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page