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