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 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

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 :

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


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.1.1.tar.gz (29.2 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.1.1-py3-none-any.whl (34.6 kB view details)

Uploaded Python 3

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

Hashes for pylpex-1.1.1.tar.gz
Algorithm Hash digest
SHA256 8e1355201335cb9ba519b2e5a077f8cc7f9b4e83ca61988eb1f134959d1471a2
MD5 384c6ceb1efbed9d486df09bd6ed086b
BLAKE2b-256 627fcb78466643cc5020c0390ada49860991e51daefdb6ca4cf7d13e8654e446

See more details on using hashes here.

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

Hashes for pylpex-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c125b362f12123877ee224a3a19a7a1c0736e40d24ae44b28fe33736b09b40c1
MD5 ce9d0ee6ab6b017dfd947660253320e6
BLAKE2b-256 056e8c96d75d258c5ca54635286fcb30dff06e27c8664f4259181ca69670af10

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