Projet EZ Language - Département Informatique
Transcription
Projet EZ Language - Département Informatique
Projet EZ Language Département Informatique Université d'Angers Jean-Michel RICHER 1 Constat il existe beaucoup de “mauvais” langages – la syntaxe est étrange (Python) ● import – – ● – import os as computer from os import path for, if, … ':' sémantique difficile à comprendre (Perl) $fk =~ s#(?<=\()([^\)]+)(?=\))#join(', ', sort(split(/, /, $1)))#ge; – structuration (tabulations, ':', ';') 2 Motivations désir de créer un langage – simple (syntaxe) – logique, verbeux (compréhensible) – doté de types simples, structurés – efficace – … 3 Expérience antérieure le projet de compilateur CPYRR – Master 1 Informatique Univ. Bourgogne – 4 développeurs – 3 mois de développement durant la période de cours – Pascal vers C ● presque tout le langage Pascal – désimbrication des sous-programmes 4 Compilateur principe général, on distingue 4 phases – l'analyse lexicale – l'analyse syntaxique – l'analyse sémantique – la génération de code cible on utilise un langage intermédiaire pour représenter le programme à traduire des tables de stockage (lexème, symboles) 5 Le processus de compilation langage source Analyse Lexicale Analyse Syntaxique Analyse Sémantique table des lexèmes table des symboles langage intermédiaire Génération de Code Cible langage cible 6 L'analyse lexicale identifiant [a-zA-Z][a-zA-Z_]+ unités lexicales langage source Analyse Lexicale table des lexèmes Lexèmes ptr_element 7 L'analyse syntaxique table des lexèmes grammaire table des symboles Lexèmes Analyse Syntaxique langage intermédiaire 8 L'analyse sémantique Contrôle de Type Analyse Sémantique float ? float table des lexèmes table des symboles x = 10 + sqrt(y / 3) langage intermédiaire integer 9 Le EZ language écrire du code C++ est souvent – contraignant – rébarbatif on peut simplifier l'écriture et les concepts – une instruction par ligne ('\n' équivalent à ';') – types simples – structures simples – fonctions associées aux types 10 Exemple 1 élimination de la déclaration des variables de boucle C++ int i; for (i = 0; i < 10; ++i) { } EZ for i in 0..9 do endfor for (int i = 0; i < 10; ++i) { } 11 Exemple 2 trier un tableau, somme des éléments C++ #include <algorithm> #include <numeric> using namespace std; EZ tab is array[1..10] of integer int tab[10]; sort(&tab[0], &tab[10]); tab.sort(); int sum = accumulate(&tab[0], &tab[10], 0); local sum is integer sum = tab.sum(); 12 Exemple 3 classes EZ C++ class Person { protected: string name; int age; }; déclaration constructeur, destructeur, setters, getters, …. vector<Person> v; sort(v.begin(), v.end(), [](const Person& lhs, const Person& rhs) { return lhs.name > rhs.name; }); sort(v.begin(), v.end(), [](const Person& lhs, const Person& rhs) { return lhs.age > rhs.age; }); class Person is name is string age is integer endclass p is Person p.name = “toto” p.age = 10 v is vector of Person v.sort(name) v.sort(age) 13 Exemple 4 introduire du langage externe (C, Assembleur) EZ function count(t is array of integer) is integer begin local sum is integer = 0 for i in 1..t.size() do sum = sum + t[i] endfor return sum end EZ + C/C++ function count(t is array of integer) is integer begin local sum is integer = 0 code(C) for (int i = 0; i < t.size(); ++i) { sum = sum + t[i]; } endcode return sum end 14 Organisation du projet Création de groupes de travail Répartition des étudiants dans ces groupes Gestion de l'avancement du projet 50 h équivalent TD x #étudiants 15 Groupes de travail GT Organisation GT Langage GT Architecture GT Compilateur GT Diffusion 16 GT Organisation Echange, partage d'informations, logiciels – dépôt : git, svn, sourceforge ? – IDE : Eclipse ? – outils : couverture de code, automatisation des tests, gestion des bugs – intégration en continu ? – échange d'information ? mail, tableau, conversation face à face – suivi de l'avancement du projet – méthode de développement ? 17 GT Langage qu'est ce que le langage est capable de traiter – types de base – types structurés – syntaxe des instructions – classes – modules, programmes – programmes de démonstration, de test 18 GT Architecture que fait le compilateur quelles sont les options en ligne de commande organisation des bibliothèques du langage modules utilisateurs et programmes installation, déploiement 19 GT Compilateur flex, bison contrôle sémantique erreurs langage intermédiaire (classes) table des lexèmes, des symboles génération de code cible C++ 20 GT Diffusion site web du langage technologies (PHP, Java, Bootstrap, … ?) documentation, tutoriels (en anglais) contact rapport de bugs 21