• Aucun résultat trouvé

Cours de Compilation - Test de connaissances

N/A
N/A
Protected

Academic year: 2022

Partager "Cours de Compilation - Test de connaissances"

Copied!
2
0
0

Texte intégral

(1)

Cours de Compilation - Test de connaissances

Master d’Informatique M1 2011–2012 12 septembre 2011

Nom: . . . Pr´enom : . . . .

1 Test de connaissances

1. Donner une expression r´eguli`ere qui correspond aux notations des nombres flottants, par ex- emple: +3.56e−4,−0.67, 35, . . .

Correction : En supposant au moins toujours un chiffre avant le point et en notant d l’ex- pression r´eguli`ere0|1|2|3|4|5|6|7|8|9 et r? pour r|:

(+|−)?d+(.d)?((e|E)(+|−)?d+)?

2. Soit une grammaire avec E est un non-terminal et les symboles a, b et + comme symboles terminaux:

E::= a E::= b E::= E+E

(a) Le mot a + b + a est-il reconnu par la grammaire ? si oui donner une d´erivation.

Correction : Oui : E →E+E →a+E →a+E+E →a+b+E →a+b+a (b) Cette grammaire est-elle ambig¨ue ? pourquoi ?

Correction : Cette grammaire est ambig¨ue car il y a deux arbres de syntaxe abstraite pour le mot a+b+a correspondant aux deux parenth´esages(a+b) +a et a+ (b+a).

(c) Cette grammaire est-elle LL(1) ? pourquoi ?

Correction : Une grammaire est LL(1) si on peut faire une analyse descendante avec un seul caract`ere d’avance. Une grammaire ambig¨ue n’est jamais LL(1), de mˆeme une grammaire r´ecursive gauche n’est jamais LL(1).

3. Le mode de passage des arguments en Java est-il par valeur ou par r´ef´erence ?

Correction : En Java les param`etres sont pass´es par valeur. La valeur d’un objet est une adresse dans le tas `a laquelle est stock´e l’objet.

Quel est le r´esultat du programme suivant en Java ? c l a s s A {

i n t x ;

A ( i n t v ) { x=v ;}

s t a t i c v o i d m (A a ) {a = new A( 2 ) ;}

p u b l i c s t a t i c v o i d main ( S t r i n g a r g v [ ] ) { A b = new A ( 0 ) ; m ( b ) ;

System . out . p r i n t l n ( b . x ) ; } }

Correction : Le r´esultat du programme est 0:

(2)

September 15, 2011 2 – L’instruction A b = new A(0) cr´ee un nouvel objet `a l’adresse a0 dont le champs x vaut 0

et affecte `a la variable b cette adresse a0.

– L’appel m (b) introduit une nouvelle variable a qui est initialis´ee avec la valeur de b soit l’adresse a0.

– L’instruction a = new A(2) cr´ee un nouvel objet `a l’adresse a1 dont le champs x vaut 2 et affect `a la variable a cette adresse a1.

– A la sortie de la m´ethode, la variable a disparait et b reste inchang´e il a toujours pour valeur l’adresse a0 `a laquelle se trouve un objet dont le champs x vaut 0.

Références

Documents relatifs

Dans ces conditions, les écritures dont l’élève s’occupe ne sont pas pour lui « un dispositif pour l’évocation de pratiques donnant un sens à l’activité

Résumé Cet article présente un nouveau protocole d’apprentissage de la programmation dans lequel les séquences de travail sont structurées en cycles : d’abord

Au Moyen Age, la Gascogne centrale est divisée en espaces politiques et géographiques bien délimités et très marqués, tels, par exemple, les comtés

Etablir une fonction d´eriv´ee ´ Fiche m´ethode On pourrait d’abord se poser la question l´egitime de savoir si toute fonction admet une d´eriv´ee ; c’est l’´etude de

Dans un deuxième temps, le programme affiche le prix au litre, le prix d’un pack d’eau, sachant qu’il y a 6 bouteilles dont une est offerte, ainsi que le prix d’une palette

Saisir le code tarif correspondant au poids d’une lettre et afficher le prix à payer et afficher un message d’erreur si la lettre pèse plus de 500

Une classe est l’abstraction d’un ensemble d’objets qui possèdent une structure identique (attributs) et un même comportement (opérations, méthodes). Un objet est une

Afin de pouvoir être appelé, le setteur doit être déclaré « public » Dans notre exemple, on écrira donc : public void{.