程序代写代做代考 Java python Fortran c++ ada prolog C

C
C++
Alain Chillès – 祁冲 Ada
Python
Java
Théorie des langages de programmation
Pr
Le
p
g
o
l
ro
o
jet
(III)
Forth
ParisTech Shanghai Jiao Tong 上海交大–巴黎高科卓越工程师学院
Pascal
10 octobre 2016 – 2016年10月10日 –丙申年九月初九
Lisp
APL
Fortran
1

Plan
C
Python Prolog
Java
Projet
Que faut-il faire pour interpréter ?
C++ Lisp
Forth Ada
Pascal
APL
Fortran
2

Interprète – mode simple
C
fonctions de base ;
Python
Java
Interaction avec l’environnement, on connaît tout (table des symboles, piles, machine virtuelle, etc.)
pas de définition de nouvelles fonctions, uniquement les
Prolog
Exemple
il faut séparer les informations !
Forth
Ada
La fonction +
Prend deux entiers sur la pile de données, les additionne et
C++
met le résultat sur la pile de données.
En mode calculatrice, elle doit vérifier que les deux objets à
additionner sont du bon type.
En mode compilé, cette vérification est inutile, car elle a été
Lisp
APL
faite lors de la compilation.
Il y a donc deux modes à prévoir ! Le mode interprété et le mode
compilé !
3
Pascal
Fortran

Répartition des informations
C
Ada
1
Prolog
Dans la table des symboles, on doit mettre : Forth
Le nom, le nombre de paramètres, leurs types et le type des résultats ;
dans le code (mode interprété : mettre le vérification des
2
s la machine virtuelle, on doit mettre
Python C
Java
+
Dan
+
Lisp
APL
Fortran
types, mode compilé : c’est inutile de le mettre) ;
Le code ; et… ?
Pascal
4

Objets de base : seront définis en langage C Python
C
Prolog
Java
1
Les types de base (des objets qui seront sur la pile de données) : les entiers, les adresses des chaînes de caractères
(où seront rangées les chaînes de caractères ?) ; d’autres types ? fonctions de reconnaissance de types ?
C++
Ada
2
3 les fonctions de base : dup, drop, swap, ., count, type, =, ∗,
+, −, etc.
4 les structures de contrôles seront réservées à la compilation…
Lisp
APL
Fortran
Forth
Pascal
5

Problème des chaînes de caractères
C
Python
Java
) est la longueur, suivie des codes ascii des caractères la composant.
Le rangement usuel en Forth(et donc en L AC
Prolog
Forth
Exemple
La chaîne “Alain” sera rangée sous la forme :
C++
En langage C, elle sera rangée sous la forme :
Ada
5
65
108
97 105 110
Pascal
65
108
97
105
110
0
Lisp
APL
Fortran
6

Mots de base
Python
dup (n – n n) : duplique le sommet de la pile de données, si celui-ci est de type t, on obtient deux objets de type t.
C
Java
Prolog
drop (n – ) : supprime le sommet de la pile de données.
swap (n1 n2 – n2 n1): échange les deux éléments sur le haut
de la pile de données.
Ada
. (e – ) : imprime l’entier qui est sur le sommet de la pile de
C++
données et le supprime.
count (ad – ad’ e) : prend l’adresse de chaîne en haut de la
pile, et la remplace par l’adresse du début de la chaîne sans la
longueur et met la longueur sur le sommet (type entier).
type (ad e – ) : imprime e caractères dont les codes sont à
APL
booléen. Fortran
partir de ad.
=(e1e2–b): testesie1 =e2 (deuxentiers)etempileun
Lisp
Forth
Pascal
7

Choix simples
Python
Java
C+
C
Prolog
des booléens, etc.)
Sur la pile de retour, il n’y aura que des entiers (qui ne seront
Sur la pile des données, il n’y aura que des entiers (qui
pourront être lus comme des entiers, des adresses de chaînes,
pas typés).
Ada
Sur
la pile des types, il n’y aura que des entiers (chaque type
+
portant un numéro).
Dans la table des symboles et la machine virtuelle, il n’y aura
que des entiers (pour simplifier la lecture et l’écriture).
APL
Fortran
Lisp
Forth
Pascal
8

Exemple de rangement : la fonction +
1
Python
Dans la table des symboles
C
Java
0
1
2
3
4
5
6
7
8
0
1 43 2 1 1
l + n1 t1 t2 Prolog
1
1
0
n2
t3
c
C+
Ada
Oùl=1estlalongueurdunom,43estlecodede+,n1 le Forth
nombre de paramètres sur la pile de données, t1 le type du
premier paramètre (sur le sommet de la pile) – le type entier
par
+
est codé 1, t2 le type du deuxième paramètre, n2 le nombre de
amètres de sortie, t
la machine virtuelle le code de +. (c se nomme le Cfa de + –
Code Field Address).
2 Dans la machine virtuelle
Pascal
en C) et le deuxième 0 son numéro parmi
les
fonc
a
3
son type et c l’endroit où trouver dans
Lisp
01 APL
00
Où le premier 0 signale que c’est une fonction de base (codée
F
n
o
r
tio
t
ns
de
ba
r
se.
9

Exemple de rangement : la fonction swap Python
1C
Dans la table des symboles
Java
9
10
11
Prolog
12 13 14 1516
17
18
19
20
21
1
4
115
119
97
112
2
0
0
Forth
2002
n2 t3 t4 c
a
l
s
w
a
p
n1
t1
t2
Où a = 1 désigne l’adresse dans la table des symboles où
C++
Ada
commence le nom de la fonction précédemment définie (ici +),
et c = 2 désigne le Cfa de swap. Le type quelconque a été codé par 0.
2 Dans la machine virtuelle
Pascal
2
3
APL
Fortran
Lisp
01
10

Bilan Python Nous avons aussi besoin
Java
C
d’un endroit où ranger les chaînes de caractères ;
Prolog
d’un tableau contenant toutes les fonctions de base ;
de structures pour la table des symboles, permettant de
h
connaître où on peut commencer à écrire, où
dernier mot défini, etc. et pour la machine virtuelle aussi…
C++ Ada
… où sont définis les types ? On a mis des numéros, comment faire les nouveaux types ?
certaines fonctions (par exemple if) ne sont pas utilisables en
mode calculatrice, comment le dire ?
Lisp
APL
certaines fonctions (par exemple if) ont quelque chose à faire
au moment de la compilation (qui est souvent différent ce
qu’elle fait à l’exécution), comment le dire ?
F
se tr
o
ouv
Fortran
r
e
le
Pascal
t
11

À faire
Python
Java
C
Prolog
Définir les objets du langage ;
programmer un exécuteur permettant de lire une machine
virtuelle où il n’y a que des fonctions de base il doit pouvoir exécuter une chaîne du genre
;
C++
du genre
Ada
On doit utiliser la machine virtuelle !
Lisp
2␣3␣4␣*␣swap␣6␣+␣-␣.
Il doit y avoir une erreur à l’exécution lorsqu’il y a une chaîne
“␣Alain”␣2␣*
Pascal
APL
Fortran
F
orth
12