quelques corrections

This commit is contained in:
Florent Madelaine 2024-11-04 12:47:05 +01:00
parent 4972b310a2
commit c99a859fd9
2 changed files with 171 additions and 0 deletions

View File

@ -0,0 +1,28 @@
| a | b | spécial?
===================================
epsilon | a | b | initial
a | aa | ab |
b | ba | bb |
aa | aaa | aab |
ab | aba | abb |
ba | baa | bab |
bb | bba | bbb |
aaa | aaa | aab |
aab | aba | abb |
aba | baa | bab |
abb | bba | bbb |
baa | aaa | aab |
bab | aba | abb | acceptant
bba | baa | bab |
bbb | bba | bbb |
Version optimisée avec moins d'états.
| a | b | spécial?
===================================
epsilon | epsilon | b | initial
b | ba | b |
ba | epsilon | bab |
bab | ba | b | acceptant

View File

@ -0,0 +1,143 @@
Code en pseudo python à traduire en MVàP
j = 1
i = 0
i = j
while i < 10:
i += 1
print(i)
Pour le début (affectation des variables)
j = 1
i = 0
i = j
PUSHI 1 # j adresse 0
PUSHI 0 # i adresse 1
PUSHG 0 # récupère j
STOREG 1 # affecte à i
Pour la structure de la boucle While, il suffit de recopier l'exemple du cours.
LABEL 0
# le test qui va laisser une valeur 0 ou 1 en haut de la pile
JUMPF 1 # saut conditionnel vers le label 1 si le test est Faux sinon continue
# quelque chose
JUMP 0
LABEL 1
#La suite
Il faut qu'on traduise les 3 morceaux de code :
test,
corps de la boucle,
la suite.
Le test.
i < 10
PUSHG 1 # valeur de i
PUSHI 10
INF
Le corps de la boucle.
i += 1 # même chose que i = i+1
PUSHG adresse de i
PUSHI 1
ADD
STOREG adresse de i
Comme i habite à l'adresse 1 ça donne ce code.
PUSHG 1
PUSHI 1
ADD
STOREG 1
la suite.
print(i)
en pratique on récupère i, on utilise WRITE, on fait POP pour nettoyer la pile.
PUSHG 1 # adresse de i vaut 1
WRITE
POP
Solution complète.
PUSHI 1 # j adresse 0
PUSHI 0 # i adresse 1
PUSHG 0 # récupère j
STOREG 1 # affecte à i
LABEL 0
# test
PUSHG 1
PUSHI 10
INF
JUMPF 1
#corps boucle
PUSHG 1
PUSHI 1
ADD
STOREG 1
JUMP 0
LABEL 1
#La suite
PUSHG 1
WRITE
POP
# Effacer les variables
POP
POP
HALT
### Autre exercice donné au tableau
Expression avec deux variables x et y qu'on demande à l'utilisateur
PUSHI 0 # x adresse 0
PUSHI 0 # y adresse 1
# demande user val x
# READ
PUSHI 10
STOREG 0
# demande user val y
# READ
PUSHI 3
STOREG 1
# calcul de
# (x+3)*y+4*x
# Parenthesage egal arbre de syntaxe comme au tableau
# de base en haut et de gauche à droite on écrit le code MVàP
# x+3
PUSHG 0
PUSHI 3
ADD
PUSHG 1
MUL
PUSHI 4
PUSHG 0
MUL
ADD
WRITE
POP
# effacer var x et y
POP
POP
HALT