BateLang est un langage de programmation expérimental que j’ai développé dans le but de comprendre en profondeur le fonctionnement d’un langage : du code source jusqu’à son exécution.
Il s'agit d'un projet pédagogique qui regroupe un lexer, un parser, un générateur d'AST et un interpréteur.
- Apprendre les bases de la construction de langage (compilation/interprétation).
- Développer un projet structuré en C++ moderne.
- Comprendre les étapes réelles derrière un langage comme C, C++, GO etc.
- Acquérir une expérience concrète.
- Lexer : découpe le code source en tokens (
let,if,x,>,;, etc.). - Parser : transforme les tokens en un AST structuré.
- AST (Arbre de Syntaxe Abstrait) : représente le code de manière hiérarchique.
- Interpréteur : exécute le code contenu dans l'AST.
- Instructions supportées :
let x = 10;: déclaration de variablex = x - 1;: réaffectationprint(x);: affichageif (...) { ... }: conditionnellewhile (...) { ... }: boucle- Expressions arithmétiques avec priorité (
+,-,*,/,==,<,>)
Assurez-vous d’avoir un compilateur C++ (g++ recommandé).
g++ -std=c++17 main.cpp lexer.cpp parser.cpp AST.cpp interpreter.cpp -o batelang
### Exécuter :
```bash
./batelang
Le programme exécute un code source intégré dans main.cpp.
Un exemple d'interpréteur interactif (REPL) viendra plus tard.
---
## Exemple de code BateLang :
let x = 10;
if (x > 5) {
print(x);
}
while (x > 0) {
x = x - 1;
print(x);
}
### Résultat attendu :
10
9
8
7
6
5
4
3
2
1
0
---
## Structure du projet :
src/
lexer.hpp / lexer.cpp → Génère les tokens à partir du code source
parser.hpp / parser.cpp → Construit l’AST
AST.hpp / AST.cpp → Définit la structure des nœuds d’AST
interpreter.hpp / .cpp → Évalue et exécute l’AST
main.cpp → Fichier principal de test
---
## Inspirations
- les bases du language C en grande partie
- Ma curiosité sur les compilations/interpréteurs depuis le début de cette aventure informatique
---
## Prochaines pistes d'amelioration
- Ajouter le support des chaînes ("texte")
- Fonctions définies par l'utilisateur
- Fichiers en entrée (au lieu de hardcoded dans main)
- Interpréteur interactif (REPL)
- Ajout d’un système de types (bool, string, int)
- Génération de bytecode ou de C intermédiaire (compilation réelle)
---
## Contribuer
Il s'agit d’un projet personnel, mais toute contribution est la bienvenue.
Les idées, suggestions ou PR sont ouvertes.
---
## Licence
Ce projet est open-source, disponible sous licence MIT.
---
Merci d’avoir lu jusqu’ici !
J’espère que vous avez apprécié ce projet autant que j’ai pris plaisir à le développer jusqu'ici.
---