Rapport Compila
Rapport Compila
Rapport Compila
programmation
Dictel
portabilité élevée et programmation memory-driven
Génie Logiciel
Réalisé Par
Encadré Par
Nous tenons à remercier avec une grande ferveur tous ceux qui nous ont soutenus directe-
ment ou indirectement pendant ce projet et sa réalisation.
Nous voulons également exprimer notre profonde gratitude à nos encadrants Mr OULAD
HAJ THAMI Rachid et Mr TABII Youness pour leur aide en nous éclairant sur tout ce qui
concerne les compilateurs et aussi leurs conseils pendant ce travail.
Enfin, nous devons remercier le corps professoral, car il a été à nos côtés pendant ces moments
difficiles de la pandémie. Nous aurions aimé travailler sur ce projet directement avec nos
professeurs, mais même dans ces circonstances, ils nous ont quand même soutenus.
2
Résume
Le but de ce projet est de concevoir un nouveau langage et d’explorer les façons dont il
pourrait améliorer le paysage informatique. Ce document décrira l’évolution de la conception du
langage Dictel et les différentes étapes que nous avons prises pour concevoir un mini-compilateur
pour celui-ci. Le rapport abordera d’abord l’analyse et la conception, puis l’aspect réalisation du
projet.
3
Abstract
The goal of this project is the conception of a new language and exploring the ways it could
improve the computer science landscape. This document will describe the evolution of the
conception of the Dictel language and the different steps we took to engineer a mini-compiler for
it. The report will touch on analysis and conception first and then the realization aspect of the
project.
4
Table de Matières
1 Introduction 6
2 Analyse et Conception 7
2.1 Motivation et présentation du langage Dictel . . . . . . . . . . . . . . . . . . . . . 8
2.2 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Lexique du langage Dictel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Création d’un variable avec inference de type . . . . . . . . . . . . . . . . 9
2.3.2 Création d’un variable sans initialisation (null par defaut) . . . . . . . . . 9
2.3.3 Création d’un variable pour une seul utilisation avant d’etre liberer . . . . 9
2.3.4 Création d’un variable avec un type pour eviter l’inference du type . . . . 9
2.3.5 Création d’un variable avec un allocation dynamique(en octet) . . . . . . 9
2.3.6 Création d’un variable immutable(constante) . . . . . . . . . . . . . . . . . 9
2.3.7 Création d’un variable non-nullable(raise error if monVariable is null) . . 9
2.3.8 Création d’un variable de type tableau . . . . . . . . . . . . . . . . . . . . 9
2.3.9 Création d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.10 Création d’une fonction asynchrone . . . . . . . . . . . . . . . . . . . . . . 9
2.3.11 Création d’un pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.12 Création d’un bloc conditionnel . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.13 Création d’un bloc itératif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.14 Création d’un bloc itératif conditionnel . . . . . . . . . . . . . . . . . . . . 10
2.3.15 Opérateur ternaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.16 Création d’un range (interval) . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.17 Création d’un switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.18 Création d’une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.19 Modification d’un variable . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.20 Supprimer un variable de la mémoire . . . . . . . . . . . . . . . . . . . . . 11
2.3.21 Voir les paramètres d’une variable . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.22 Afficher du texte sur la console . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.23 Lire la saisie d’un utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.24 Afficher du texte sur la console avec interpolation . . . . . . . . . . . . . . 11
2.4 Grammaire du langage Dictel (LL1) . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.1 Terminaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.2 Non Terminaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.3 Les règles de production . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Conclusion et perspectives 14
5
Chapitre 1
Introduction
Des milliers de langages de programmation ont été créés et d’autres sont créés chaque année.
ils peuvent être compilés, interprétés ou bien semi-interprétés. La majorité est écrite sous une
forme impérative (c’est-à-dire comme une séquence d’opérations à effectuer) tandis que d’autres
langages utilisent la forme déclarative (c’est-à-dire que le résultat souhaité est spécifié, pas
comment y parvenir).
6
Chapitre 2
Analyse et Conception
Dans ce chapitre, nous présenterons notre analyse du langage souhaité qui nous conduira à une
implémention qui répond a nos objectives.
7
2.1. Motivation et présentation du langage Dictel 8
2.2 Objectifs
Le langage que nous voulons créer doit répondre à ces buts suivantes:
• Créer un langage qui brouille les frontiéres entre les variables et les fonctions et d’autres
outils de codage en introduisant une structure unique qui stocke et suit tous les composants
d’un programme.
• Définir un cadre général qui peut améliorer la façon dont nous échangeons des algorithmes
et des scripts en tirant parti d’un middleware que tout autre langage peut interpréter
facilement.
• Mettre l’accent sur la réutilisabilité du code en mettant à niveau les blocs conditionnels et
itératifs en pseudo-fonctions pouvant être appelées plusieurs fois.
• Le but le plus ambitieux de ce projet et le plus intéressant est de créer des scripts simplement
en spécifiant quelques variables. Puisque le langage est créé par une structure de données
unique, cette dernière serait capable de construire des instructions de manière autonome.
2.3.3 Création d’un variable pour une seul utilisation avant d’etre liberer
add(monVariable, 45, use=1)
2.3.4 Création d’un variable avec un type pour eviter l’inference du type
add(monVariable, 45, type="int")
Remarque: On peut également utiliser le for et le if et le while traditionnel sans aucun problème
while(condition){
for(int i=0; i<6; i++){
if(condition){
monVariable = monVariable + 1
} else {
monVariable = monVariable + 1
}
}
}
G = { T, NT, S, P } avec:
2.4.1 Terminaux
T = { 'acf','aco',',','+','-','*','/','=','!','<','>','<=','>=','?','void',
'char','short','int','float','long','double','signed','unsigned','string',
'pipe','type','immutable','unmmutable','null','if','for','when','while',
'struct','use','run','synchronous','asynchronous','sizeof','allocate',
'break','->','log','scan',':','..','return','params',')','(','add',
'erreur','eof','function','state','[',']','"','kind','$','=>','del' }
2.4. Grammaire du langage Dictel (LL1) 12
aco = '{'
acf = '}'
# ** La grammaire P **:
---------------------------------------------
TYPE => epsilon | , type = " TYPES {[]} "
2.4. Grammaire du langage Dictel (LL1) 13
Conclusion et perspectives
Ce projet visait à créer un prototype de langage de programmation. Il est passé par de nom-
breuses étapes comme la conception et la mise en œuvre avec les analyseurs lexicaux et syntax-
iques.
C’était un projet très fructueux et nous avons beaucoup appris sur le fonctionnement d’une
langue et les différentes nuances qui résument sa création.
Nous espérons que ce ne sera pas la fin de cette langue mais un point de départ pour plus.
Nous espérons que grâce à de futures améliorations impliquant la sémantique et la génération
de p-code, ce langage deviendra vraiment ce que nous avons imaginé. Nous pensons sûrement
que ce sera une énorme amélioration pour la communauté informatique.
14