Un simple compilateur basé sur un langage "C-PASCAL" et une Grammaire LL1 construit pour des raisons éducationnelles. Open source et construit from scratch.
Sous encadrement et supervision de
- Monsieur Souhaïl El ghazi El Houssaïni
Avec contribution de :
- Un parseur lexical.
- Un parseur Synataxique.
- Parseur Syntaxique et gesion des erreurs
- Génération de l'arbre décoré et contrôle sémantique des types de variables.
- Code intermédiaire :
- Génération d'un code intermédiaire en P-machine.
- Une machine virtuelle p-machine qui exécute les instructions p-code.
- Ajouter cpc.exe dans la variable d'evironnemment path
- Pour obtenir de l'aide tappez la commande
cpc.exe -h
- Compiler le code source p-code en tappant la commande
cpc.exe nom_du_fichier
Le résultat de la compilation sera obtenu sous la l'architecture suivante :
Output
│
└───Lexical
│ └───TablesIdentif
│ | │ main.ident (table des identifiants)
│ │
│ └───TablesMotsRes
│ | │ main.mrs (table des mots reservés)
| |
| |___main.lex (résultat du lexical parsing)
│
└───XML
| │___ Arbre syntaxique en XML
|
|___PMachineCode
| |
| |___ code généré
|
|
|___TS_Table
|
|__ Table des symboles sémantique
- Génération du code intermediaire Dans le dossier output vous allez obtenir un fichier objet qui contient le code p-code
- Exécution du code intermédiaire Ejouter le fichier stack-machine.exe dans la variable d'environnement et exécuter la commande stack-machine.exe + votre_fichier_à_exécuter Après la compilation on aura obtenu un code source en language intermediaire p-code que vous pouvez exécuter en utilisant la machine virtuelle, vous pouvez exécuter un tappant la commande
stack-machine nom_du_fichier.o
Nous disposons ici d'une solution divisée en deux :
- Le Compilateur C-Pascal : Donne comme résultat les fichiers cités au-dessus
- La machine virtuelle P-Machine : Exécute le code intermedaire généré par le générateur de code Description des parties du compilateur C-Pascal :
- Equipé par une Table de hashage il fait la reconnaissance des unités lexicales du language dans le code source écrit en C-Pascal
- Génère une une table des identifiants et une une table des mots reservés ainsi que un fichier main.lex contenant le résultat du parsing lexical
- Génère l'arbre syntaxique en XML en se basant sur les règles de producations de la grammaire
- Grifé dans le santaxique il génère une table des symboles contenant tous les informations à propos des symboles utilisés dans le code source en C-Pascal
- Il génére le code intermediaire en p-code destiné à être exécuté par la machine virtual p-machine.
- Il est gréfé dans le syntaxique et se sert des règles de production pour générer le code intermediaire.
- Il gère l'adressage des fonctions et leur appels.
- Equipée d'une pile sert à exécuter le code générer par le générateur de code.
- Equipée de deux modes, mode débuggage et mode automatique, le mode débuggage affiche graphiquement la pile d'éxécution et son évolution au cours de l'éxécution.
Le language et fait de tel sorte à ce qu'il prend en main le type caractère
car a;
main()
entier d, entier x;
{
a = 'n';
si( a == 'b' ) alors{
ecrire('y');
}
}
Le code intermediaire généré par cet exemple :
PILE 1
APPEL 3
FIN
ENTREE
PILE 2
EMPC n
DEPG 0
EMPG 0
EMPC b
EGAL
SIFAUX 13
EMPC y
ECRIV
CPC Compiler est sous la Licence Publique Générale GNU vous pouvez le redistribuer et/ou le modifier selon les termes de la license GNU. Nous avons utilisé CLI pour gérer la ligne de commande qui est aussi sous la Lisence Générale GNU.
Si vous avez détecté des bugs ou si vous voulez suggérer des améliorations dans C-Pascal Compiler, n'hésitez pas à soumettre une demande pull request ou de le signaler dans issues.