C
C++
Alain Chillès – 祁冲 Ada
Python
Java
Théorie des langages de programmation
Prolog
Le projet (I)
Forth
ParisTech Shanghai Jiao Tong 上海交大–巴黎高科卓越工程师学院
Pascal
19 septembre 2016 – 2016年9月19日 –丙申年八月十九
Lisp
APL
Fortran
1
Plan
C
Python Prolog
Java
Projet Description
Forth Ada
Pascal
C++ Lisp
Analyse lexicale
APL
Fortran
2
Objectif
Python
Java
1
Écrire un compilateur pour un langage suffisamment simple
C
C++
elle
P
icale
Forth Ada
2 Analyse syntaxique
3 Analyse sémantique
4 Interprétation
5 Compilation en machine virtuelle
6 Compilation en machine ré
rolog
permettant d’aborder les thèmes suivants :
1 Analyse lex
2 Le langage proposé est un langage inspiré du langage Forth
(nous l’appellerons LAC ), mais vous pouvez aussi choisir ou Pascal
définir le langage que vous voulez traiter. Attention : si le
langage est très compliqué, le travail sera énorme et si le
Lisp
APL
Fortran
langage est trop simple, la note finale sera moins bonne !
3
Plan
C
Projet
Python Prolog
Java
Description
Forth Ada
Pascal
C++ Lisp
Analyse lexicale
APL
Fortran
4
Lexèmes
Python
Java
1
2
Les identificateurs (toute chaîne de caractère d’au moins un
C
Prolog
caractère, composée à l’aide des lettres, chiffres et symboles de
ponctuation).
Les chaînes de caractères (toute chaîne de caractère
commençant par ␣”␣ (ou “␣ en début de ligne), ne contenant pas le caractère ” à l’intérieur et se terminant par le caractère
“). On fera attention qu’elle C++
Ada
peut
être
sur plusieurs lignes et
donc contenir des sauts de ligne.
3 Les commentaires de ligne commençant par les caractères ␣\␣
(ou \␣ en début de ligne) et finissant en fin de ligne.
4 Les commentaires multi-lignes commençant par les caractères
Lisp
APL
Fortran
␣(␣ (ou (␣ en début de ligne) et se terminant par ).
Forth
Pascal
5
À faire aujourd’huiPython
Java
1 2
Définir le type lexème en C.
C Prolog
Écrire un analyseur lexical qui à partir d’un fichier contenant
un texte en LAC :
1 Supprime les commentaires.
2 Produit une liste de lexèmes.
Forth Pascal
C++
Ada
On produira donc trois fichiers :
Un fichier analex.h
Un fichier analex.c
Un fichier principal L_AC.c
3 Tester sur le fichier factorielle.lac (fourni).
Lisp
APL
Fortran
6
Le fichier test Python Fichier factorielle.lac
Java
C
C++
5
7 8 9
dup 0= if
Pascal Fortran
\ Fichier “factorielle.lac”
1 2 3
4
6 : fact ( n — n!)
Prolog
( Ce fichier est un “exemple” étudié pour
→ tester
l’analyseur lexical écrit en phase 1 du
→ projet)
drop 1APL 11 dup 1- recurse *
10 else
Lisp
12 then ;
Forth Ada
7
Le fichier test
Python
Java
14
15
16
: go ( n — )
” Factorielle “count type
C
Prolog
dup .
Fichier factorielle.lac
C++
19 fact . cr ; 20
21 6go
17 ” vaut :
18 ” count type
Lisp
APL
Fortran
Forth Ada
Pascal
8