• Aucun résultat trouvé

Série d'exercices #1 IFT-2035 7 septembre 2021

N/A
N/A
Protected

Academic year: 2022

Partager "Série d'exercices #1 IFT-2035 7 septembre 2021"

Copied!
2
0
0

Texte intégral

(1)

Série d'exercices #1

IFT-2035 7 septembre 2021

1.1 Préxe, postxe et ASA

Pour chaque expression inxe ci-dessous, réécriver l'expression en notation pré- xe et postxe. Dessiner également l'arbre de syntaxe abstraite (ASA).

1. a+b+c 2. a+ (b+c) 3. a·b+c·d 4. a+b < a·(c+d)

5. (−b+sqrt(b·b−4·a·c))/(2·a)

1.2 Postxe et machine à pile

La notation postxe s'évalue facilement à l'aide d'une pile. L'algorithme général est :

1. Lire l'expression de gauche à droite.

(a) S'il s'agit d'un nombre, l'empiler.

(b) S'il s'agit d'un opérateur :

i. dépiler le nombre correspondant de valeurs du sommet de la pile ; ii. calculer le résultat ;

iii. et l'empiler.

2. Lorsque la lecture est terminée, le résultat est au sommet de la pile.

Illustrer cet algorithme avec les expressions de la section 1.1.

1.3 Si et seulement si

Voici une grammaire pour if. . . then. . . else. Les éléments E et X représentent des expressions et parties de la grammaire qu'il n'est pas important de spécier

ici. S ::= X

| if E then S

| if E then S else S Cette grammaire est ambiguë.

1

(2)

1. Donner un exemple d'ambiguïté.

2. Donner une grammaire non ambiguë qui associe les else avec le if le plus proche, comme le font les langages de programmation habituels.

1.4 Conversion de base

Écrire les fonctions suivantes en Haskell pour convertir des nombres en représen- tation binaire à décimal et vice versa (à remarquer que l'argument est un entier et que par exemple l'entier cent-un représente le nombre binaire un-zéro-un qui correspond à 5 en décimal). Vous aurez besoin des fonctions prédénies mod, et div.

bin2dec10001 17 dec2bin17 10001

Écrire la fonction baseconv en Haskell qui convertit d'une base à une autre (≤10). N'hésitez pas à dénir des fonctions auxiliaires si nécessaire.

baseconv2 10 10001 17 baseconv10 2 17 10001

Donner aussi le type de chacune des fonctions que vous avez dénies.

Note : La distinction entre une valeur et sa représentation est un thème qui réapparait souvent dans ce cours, par exemple sous la forme de la diérence entre la syntaxe et la sémantique des programmes.

1.5 Ambiguïté et récursion

Soit la grammaire suivante pour des expressions arithméthiques expr ::= expr+expr

| expr∗expr

| number 1. Montrer que cette grammaire est ambiguë.

2. Réécrire cette grammaire de manière à éliminer les ambiguïtés.

3. Cette grammaire est récursive à gauche, ce qui pose problème pour cer- taines techniques d'analyse syntaxique : En eet, dans un parseur avec analyse descendante (top down), la portion du programme devant lire la catégorie expr va devoir d'abord faire appel à la portion du programme qui doit lire la catégorie expr ...

Réécrire la grammaire de manière à éviter cette récursion à gauche.

2

Références

Documents relatifs

Toujours diff ´erent pour chaque type de machine La m ´emoire manque toujours de structure. Irr ´egularit ´es du

´ Ecrire la fonction optimize qui va essayer de simplifier une expression en ´ eliminant toutes les multiplications par 1 et 0, ainsi que les additions ` a

´ Ecrire la fonction optimize qui va essayer de simplifier une expression en ´ eliminant toutes les multiplications par 1 et 0, ainsi que les additions ` a

Comme d’habitude, vous pouvez pr´ esumer que toutes les entit´ es num´ eriques sont de type

De mani`ere ´equivalente, une grammaire est ambigu¨e s’il existe plus d’une d´erivation `a gauche d’abord pour un certain w.. De mani`ere ´equivalente, une grammaire est

b) Calculer la dérivée de la

les cours Automates et Calculabilit´ e en majeure M1 pour les grammaires formelles, et Compilation en majeure M2 pour les analyseurs syntaxiques.. Sch´ ema g´

Elle choisit (adroitement) trois valeurs de t, obtient un système de trois équations à trois inconnues a, b et c, qu’elle résout ; il ne lui reste plus qu’à conclure.. Faites