td1 16
td1 16
td1 16
? + * 3 4 + 1 -3 ? * #1 / #1 2
1. Aussi appelée “notation polonaise”, car inventée par le logicien polonais J. Łukasiewicz en 1924.
2. Backus-Naur Form, une façon courante de présenter des grammaires, utilisée ici.
1
TL2 Ensimag 1re année – 2022-2023
Sauf qu’ici, comme vu en cours, et comme on le constate sur la BNF attribuée, parse_exp
doit avoir un paramètre : la liste des valeurs des calculs précédents...
Et évidemment, parse_input a une liste en paramètre et une liste en résultat.
. Question 2. Programmer une première version de la calculette où l’opération sur les listes
“`⊕n” est implémentée par le code Python “l+[n]”. Note : l’accès “`[i]” doit être implémenté
en Python par “l[i-1]” (les listes Python commençant à l’indice 0).
. Question 3. Vérifiez vos fonctions “à la main” sur l’entrée
QUEST MULT NAT↑2 NAT↑5 END
Autrement dit : exécutez parse_input([])
Vérifiez que advance_token est bien appelée au bon moment.
. Question 4. Améliorer la calculette en implémentant l’opération sur les listes “` ⊕ n”
plus efficacement par “l.append(n)”. En effet, “l+[n]” créé une nouvelle liste en recopiant
intégralement “l”, donc à coût Θ(len(l)). En revanche, “l.append(n)” modifie la liste “l”
en place avec un coût (amorti) constant. Il devient donc inutile que parse_input retourne `0 :
à la fin la liste initiale a été modifiée en place au fur et à mesure des calculs par parse_input.
. Question 5. Qu’est-ce qui changerait si on avait défini