Projet EZ Language - Département Informatique

publicité
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
Téléchargement