C
C++
Alain Chillès – 祁冲 Ada
Python
Java
Théorie des langages de programmation
Prolog
Le projet (II)
Forth
ParisTech Shanghai Jiao Tong 上海交大–巴黎高科卓越工程师学院
Pascal
27 septembre 2016 – 2016年9月27日 –丙申年八月廿七
Lisp
APL
Fortran
1
Plan
C
Projet
Python Prolog
Java
Description du système
Forth Ada
Pascal
C++ Lisp
Analyse syntaxique
APL
Fortran
2
Le langage LAC Il est constitué
Python
Java
une machine virtuelle, nommée VM, qui sera un tableau C
d’entiers ;
une table des symboles, nommée LAC, qui sera un tableau
d’entiers ;
Prolog
Forth
une pile de données, nommée data_stack, qui sera une pile LIFO d’entiers ;
C++
Ada
une pile de retour, nommée return_stack, qui sera une pile
LIFO d’entiers ;
une pile de types, nommée type_stack, qui sera une pile LIFO
d’entiers ;
Pascal
Lisp
mode compilé.
APL
tous ces objets sero
nt gé
rés p
ar un programme d’exécution, appelé run qui pourra fonctionner en mode interprété et en
Fortran
3
Rappel sur les piles
C
Python
Java
On avait défini le type pile de la manière suivante :
Prolog
Source C
1 struct pile {
Forth 3 void (*push)(int);Ada
int (*pop)(void); C++
2
4 };
5
6 typedef struct pile pile;
Pascal
Donc, essentiellement deux possibilités pop (qui dépile) et push
(qui empile).
APL
Fortran
Lisp
4
Description du mode interprété
LC AC
Python Prolog
Java Forth
” -(1-2)+(3-4)x(-5)” calculate .
La fonction calculate fait l’analyse lexicale, syntaxique et
1
C++
Ada
l’évaluation de l’expression, met sur la pile de données
(data_stack) la valeur obtenue 6, et sur la pile de types (type_stack), le type correspondant à un entier. Pascal
La fonction ., dépile la pile de données et la pile de types, et
imprime le résultat.
Lisp
APL
Fortran
5
Rappels sur les arbres
C
+
Prolog
−×
Python
Java Forth
Ada
− −−5 Pascal
APL
C++
Lisp
Fortran
1234
6
Notations pré, post et infixées
Dans l’arbre, on passe en fait : une seule fois sur les feuilles ;
C
Prolog
Python
Java
deux fois sur les opérateurs unaires ;
trois fois sur les opérateurs binaires.
Suivant le moment de lecture, l’arbre précédent peut se lire :
1 Notation infixée C++
2 Notation préfixée
+␣-␣-␣1␣2␣x␣-␣3␣4␣-5 lu comme Pascal
(+ (- (- 1 2)) (x (- 3 4) -5))
3 Notation postfixée APL
Lisp
1␣2␣-␣-␣3␣4␣-␣-5␣x␣+ lu comme (((1 2 -) -) ((3 4 -) -5 x) +)
Ada
-(1-2)+(3-4)x(-5)
Forth
Fortran
7
Plan
C
Projet
Python Prolog
Java
Description du système
Forth Ada
Pascal
C++ Lisp
Analyse syntaxique
APL
Fortran
8
À faire cette séance
C
Python
Java
Forth
Programmer la fonction calculate ;
l’intégrer avec l’analyseur lexical de la semaine précédente,
Prolog
pour pouvoir exécuter la commande LAC LAC – Calculatrice
C++
On produira donc
Ada
Pascal
APL
Fortran
1 ” -(1-2)+(3-4)x(-5)” calculate .
Lisp
des fichiers calculate.h et calculate.c ;
un fichier principal capable d’interpréter la commande
ci-dessus.
9