• Aucun résultat trouvé

Partiel de Compilation

N/A
N/A
Protected

Academic year: 2022

Partager "Partiel de Compilation"

Copied!
2
0
0

Texte intégral

(1)

Partiel de Compilation

<brains on>

1 Bison

Uneexpest de typeexp_t.

1. Qu’exprime la grammaire suivante ? exps: exp | exp ’;’ exps

2. Que pourrait-on lui reprocher et comment la réécriez-vous ?

3. Complétez votre proposition en incluant les actions et la reprise sur erreur.

4. Ecrivez une grammaire pour “une liste d’exp(0 ou plusieurs) séparés par des;”, avec les actions et la reprise sur erreur.

2 Typage

Soient les fonctions suivantes :

function int_id (a: int) : int = a

function string_id (a: string) : string = a

1. Qu’est-ce qui est gênant dans le pouvoir d’expression deTiger.

2. Il y a deux possibilités évidentes pour pallier ce défaut, l’une que l’on appelleraimpliciteet l’autreexplicite. Chacune de ces possibilités donnent deux extensions deTiger. Réécrivez ce code pour chacune de ces deux saveurs deTiger. Il ne vous estpasdemandé duTiger traditionnel, mais bien d’étendreTigerde deux façons différentes.

3 Un gros vide

Pour passer à la page (0 point).

1

(2)

4 Mise en ligne (Inlining)

Lamise en ligneconsiste à replacer un appel de fonction par le corps de la fonction en elle-même.

Par exemple la mise en ligne de

function add (a: int, b: int) : int = a + b dansadd (20, 22)donne bien entendu (Et encore...)20 + 22.

Sans chercher à aller jusqu’au bout, étudions les difficultés pour l’implémentation de la mise en ligne dansnotreimplémentation detc.

1. En considérant e.g.

function is_smaller (a: string, b: string) : int = a < b, à quelle étape de la compilation suggérez-vous d’effectuer la mise en ligne ? 2. La mise ne ligne naïve de

function double (a: int) : int = a + a

peut conduire à des résultats désagréable. Comme quoi ? 3. Comment faut-il faire alors ?

4. En vous basant sur les question précédentes, quelle différence faites-vous entre fonctions mises en ligne et macros enC?

5. Comment faire dans le cas de let fact (n : int) : int =

if n = 1 then 0

else

n * fact (n - 1) in

fact (42) end

Qu’en déduisez-vous ? 6. Considérons

1. let var delta := 1

2. function advance (x: int) : int = x + delta

3. function start_from (delta: int) : int = advance (0) + delta 4. in

5. start_from (delta) 6. end

(a) A quel problème s’expose-t-on ?

(b) Sauriez-vous réécrire cet exemple pour blinder contre ça ?

(c) Quelle solution proposez-vous pour que l’implémentation de la mise en ligne ne soit pas galère à cause de ça ?

(d) Comment implémenteriez-vous ceci danstc? Evidemment je ne veux pas de code ici, mais décrivez correctement votre suggestion.

<brains off>

2

Références

Documents relatifs

Expliquer pourquoi l’implémentation LL(1) de cette grammaire sera sûrement plus perfor- mante que le parsage par automate

Si l’appelant et l’appelé sont à une distance de d (différence entre leur profondeur statique), alors calculer le lien statique coûte d + 1 instructions : c’est exactement la

Combien d’instructions coûte la maintenance des liens statiques dans l’appel d’une fonction (on comptera le travail de l’appelant avant l’appel, le travail du prologue et

Appelons OverTiger ce langage, dont les primitives sont les mêmes que celles de Tiger (print, print_int etc.)3. Discuter la possibilité d’implémenter la surcharge au sein de

D’après ce programme, détailler les conventions d’appel de cette machine, et en particulier, pour chacun des registres dire lesquels servent au passage d’argument, et au retour

Since its inception, the Tiger Compiler Project lacked this very section (see Section 1.4 [History], page 6) and that dedicated to coding style (see Section 2.4 [Coding Style], page

Declarations of class members follow the same rules as variable and function declarations: consecutive method declarations constitute a block (or chunk) of methods, while a block

Pour chacune des grammaires suivantes, (i) préciser son type dans la hiérarchie de Chomsky, (ii) si elle est ambiguë, (iii) le langage qu’elle engendre, (iv) le type du langage dans