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.4.tar.gz (32.3 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.4-py3-none-any.whl (37.9 kB view details)

Uploaded Python 3

File details

Details for the file pylpex-1.1.4.tar.gz.

File metadata

  • Download URL: pylpex-1.1.4.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for pylpex-1.1.4.tar.gz
Algorithm Hash digest
SHA256 d50ae078da0b7d5adbb6af0ec3aa7af85b1487b74d6ef263523c82b0e197fed2
MD5 50c75ac105d1d92458bf507bb74feff8
BLAKE2b-256 dbef7d1850af55b6bc46efadba27ce3afaea3f8e24589fee0711e5a9446d1883

See more details on using hashes here.

File details

Details for the file pylpex-1.1.4-py3-none-any.whl.

File metadata

  • Download URL: pylpex-1.1.4-py3-none-any.whl
  • Upload date:
  • Size: 37.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for pylpex-1.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b15ccd25d89279499bba680536d1c2e0063207082bbd82f0551bcc0c233244f1
MD5 faa3f98f8fe58f3b624c4c0bed128e82
BLAKE2b-256 f92d922dc92050fd87ac9f581234b480abf416313e3cbcd6977b40207080d49d

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