MathLang est un langage de programmation pédagogique, à syntaxe française et orienté mathématiques, doté d'un compilateur complet écrit en C (lex/flex + yacc/bison) qui traduit le code MathLang en C, compile ce C avec gcc, puis exécute le binaire obtenu.
Le compilateur effectue les phases classiques :
- Analyse lexicale (flex) — tokenisation avec suivi ligne/colonne
- Analyse syntaxique (bison) — construction de l'AST implicite via les règles de grammaire
- Analyse sémantique — vérification de types, gestion des portées, table des symboles, table des fonctions
- Génération de code intermédiaire — quadruplets
- Génération de code C — traduction des quadruplets en C, compilé avec
gcc -lm
- Types :
Z(entier),R(réel),B(booléen),Sigma(chaîne),Car(caractère),C(complexe) - Déclarations :
SOIT x dans Z tel que x <- 42,SOIT_CONST PI dans R tel que PI <- 3.14159 - Fonctions et procédures :
FONCTION(retourne une valeur),PROCEDURE(aucun retour), avecRETOURNER - Contrôle de flux :
SI / ALORS / SINON,TANT QUE / FAIRE,POUR ... DE ... A ... [PAR ...] FAIRE,REPETER / JUSQUA,SORTIR,CONTINUER - Opérateurs logiques :
ET,OU,NON,XOR, implication et équivalence - Fonctions mathématiques intégrées :
sin,cos,exp,log,sqrt,abs,floor,ceil,round, ainsi quere,im,argpour les nombres complexes - Opérations sur chaînes : concaténation,
majuscules,minuscules - Entrées/sorties :
AFFICHER,AFFICHER_LIGNE,LIRE - Détection d'erreurs sémantiques : types incompatibles, constantes modifiées, variables non déclarées, portées de boucle, division par zéro, domaines mathématiques invalides, etc.
FONCTION factorielle(n : Z) : Z
SI n <= 1 ALORS
RETOURNER 1
SINON
RETOURNER n * factorielle(n - 1)
FIN
FIN
PROCEDURE afficher_titre(titre : Sigma)
AFFICHER_LIGNE(titre)
AFFICHER("-------------------------")
AFFICHER_LIGNE("")
FIN
gccflexbisonmake
Sous Ubuntu/Debian :
sudo apt-get update
sudo apt-get install -y build-essential flex bisonmakeCela génère l'exécutable parser (analyseur lexical/syntaxique + générateur de code C).
./parser mon_programme.mlLe compilateur affiche successivement :
- le résultat de l'analyse lexicale (table des tokens),
- le résultat de l'analyse syntaxique,
- la table des symboles,
- la liste des quadruplets générés,
- puis génère
output.c, le compile (gcc output.c -lm -o output) et produit l'exécutableoutput.
S'il y a des erreurs sémantiques, la génération de code est annulée et les erreurs sont listées.
make testCe qui exécute scripts/run_tests.sh : chaque fichier .ml du dossier tests/ est compilé, le C généré est vérifié (compilation + exécution avec timeout), et un résumé pass/fail est affiché.
.github/workflows/ci.yml— build + tests à chaque push/pull request surmain.github/workflows/release.yml— à chaque tagv*poussé, build le compilateur et publie le binaire Linux en tant que GitHub Release
Pour publier une nouvelle release :
git tag v1.1
git push origin v1.1mathlang.y # Grammaire bison (lexique + syntaxe + sémantique)
codegen_c.c # Génération du code C à partir des quadruplets
function_table.c/.h # Table des fonctions/procédures déclarées
symbol_table.c/.h # Table des symboles (variables, types, portées)
quadruplet.c/.h # Représentation et gestion des quadruplets
tests/ # Programmes MathLang de test
scripts/run_tests.sh # Script d'exécution des tests
.github/workflows/ # Pipelines CI/CD
Ce projet est sous licence MIT.