Université de Nice-Sophia Antipolis Licence d Informatique - 3e année U.E. Analyses (semestre 6)

Documents pareils
Introduction au langage C

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmique et Programmation, IMA

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Programmation système I Les entrées/sorties


1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Le prototype de la fonction main()

Bases de programmation. Cours 5. Structurer les données

I. Introduction aux fonctions : les fonctions standards

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Java Licence Professionnelle CISII,

Quelques éléments de compilation en C et makefiles

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Les structures. Chapitre 3

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Rappels Entrées -Sorties

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Programmer en JAVA. par Tama

Théorie des Langages

Programmation en langage C

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation C++ (débutant)/instructions for, while et do...while

PROJET 1 : BASE DE DONNÉES REPARTIES

Programmation système de commandes en C

TP 1. Prise en main du langage Python

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Chap III : Les tableaux

Le chiffre est le signe, le nombre est la valeur.

TD3: tableaux avancées, première classe et chaînes

Programmation Classique en langage C

Initiation à la programmation en Python

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Les structures de données. Rajae El Ouazzani

USTL - Licence ST-A 1ère année Initiation à la programmation TP 1

Cours Programmation Système

Le système de gestion des fichiers, les entrées/sorties.

Technique opératoire de la division (1)

STAGE IREM 0- Premiers pas en Python

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

V- Manipulations de nombres en binaire

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Corrigés des premiers exercices sur les classes

SUPPORT DE COURS. Langage C

COMPARAISONDESLANGAGESC, C++, JAVA ET

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Représentation d un entier en base b

Architecture des ordinateurs

Programmation C. Apprendre à développer des programmes simples dans le langage C

ACTIVITÉ DE PROGRAMMATION

Cours d algorithmique pour la classe de 2nde

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Initiation. àl algorithmique et à la programmation. en C

Cours 6 : Tubes anonymes et nommés

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmation système en C/C++

Découverte de Python

Simulation d un système de paiement par carte bancaire

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

3IS - Système d'exploitation linux - Programmation système

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Outils pour la pratique

Plan du cours. Historique du langage Nouveautés de Java 7

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Introduction à l héritage en C++

Utilisation d objets : String et ArrayList

UE Programmation Impérative Licence 2ème Année

OS Réseaux et Programmation Système - C5

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Les fichiers. Chapitre 4

AWS avancé. Surveiller votre utilisation d EC2

Guide d installation de MySQL

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours d initiation à la programmation en C++ Johann Cuenin

Cours Langage C/C++ Programmation modulaire

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Notions fondamentales du langage C# Version 1.0

Licence Sciences et Technologies Examen janvier 2010

Cours d Algorithmique et de Langage C v 3.0

Introduction à l algorithmique et à la programmation M1102 CM n 3

Initiation à l algorithmique

Programme Compte bancaire (code)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

as Architecture des Systèmes d Information

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Plan du cours Cours théoriques. 29 septembre 2014

Compression de Données - Algorithme de Huffman Document de Conception

Projet de programmation (IK3) : TP n 1 Correction

Cours de Master Recherche

Transcription:

1 Université de Nice-Sophia Antipolis Licence d Informatique - 3e année U.E. Analyses (semestre 6) 2005 2006 Examen de contrôle continu du jeudi 9 mars 2006 Durée : 2 heures Tous documents autorisés 1 Grammaire LL(1) Grammaire Extrait Axiome = Statement N = { Statement, Formal, Type, Expression T = { =, ident Statement Formal = Expression ident = Expression Expression Formal Type ident Type ident Expression ident Questions : 1. Est-ce que la grammaire Extrait est LL(1)? Justifiez votre réponse. Il faut que les ensembles directeurs soient disjoints deux à deux. Il n y a que le non-terminal Statement concerné. PREM(Formal = Expression SUIV(Statement)) = {ident PREM(ident = Expression SUIV(Statement)) = {ident PREM(Expression SUIV(Statement)) = {ident Les ensembles ne sont pas du tout disjoints, donc la grammaire Extrait n est pas LL(1). 2. Donnez-en une version qui soit LL(1), en le justifiant bien entendu. Grammaire ExtraitBis Axiome = Statement N = { Statement, endstatement T = { =, ident Statement i d e n t endstatement endstatement ident = ident = ident Cette fois-ci, les ensembles directeurs sont disjoints deux à deux. Il n y a que le non-terminal endstatement concerné. PREM(ident = Expression SUIV(endStatement)) = {ident PREM(= Expression SUIV(endStatement)) = {= PREM(SUIV(endStatement)) = {

2 2 Analyse lexicale Voici un extrait d une grammaire pour la syntaxe de Prolog-II. Les crochets indiquent le facultatif, les accolades la répétition (0 ou plusieurs fois), les guillemets certains terminaux. programme { r è g l e r è g l e terme " >" { but " ; " but terme terme termesimple [ ". " terme ] termesimple constante i d e n t i f i c a t e u r p r é d i c a t " <" " >" tuple " ( " terme " ) " p r é d i c a t i d e n t i f i c a t e u r " ( " terme { ", " terme " ) " tuple " <" terme { ", " terme " >" constante i d e n t i f i c a t e u r e n t i e r i d e n t i f i c a t e u r mot [" " mot ] mot l e t t r e { l e t t r e e n t i e r c h i f f r e { c h i f f r e Question : Extrayez de la grammaire ci-dessus les lexèmes du langage, et écrivez le fichier à donner à FLEX, afin que la fonction yylex produite renvoie le lexème adéquat sous forme d entier. Cette fonction est conçue pour être appelée depuis un analyseur syntaxique, qui considère la fin de fichier comme la fin de chaîne à analyser. Tout autre fichier susceptible dêtre inclus pour un bon fonctionnement du programme final (qui n est pas à écrire) est bien entendu à donner aussi. 1. Fichier à donner à FLEX. %{ #include " PrologToken. h " % %% " >" return FLECHE; " ; " return PT_VIRGULE; ". " return POINT; " < " return INF; " > " return SUP; " ( " return PARG; " ) " return PARD; ", " return VIRGULE; [a-z]+([-][a-z]+)? return IDENT; [0-9]+ return ENTIER; <<EOF>> return FDF; [ \t\n] ;. fprintf(stderr, " e r r e u r l e x i c a l e \ n " ); %% 2. Fichier à inclure PrologToken.h #ifndef _PROLOGTOKEN_H_ #define _PROLOGTOKEN_H_ #define FLECHE 1 #define PT_VIRGULE 2

3 #define POINT 3 #define INF 4 #define SUP 5 #define PARG 6 #define PARD 7 #define VIRGULE 8 #define IDENT 9 #define ENTIER 10 #define FDF 0 #endif... 3 Suppression de la récursivité à gauche Axiome = A N = { A, B, C T = { a, b, c, d, e A B b C e B A a C A c Grammaire Toy Questions : 1. Donnez deux phrases appartenant au langage engendré par la grammaire Toy, d une longueur minimale de 4 et passant par les deux choix de l axiome. dbab dbce 2. Appliquez l algorithme donné dans le mémento pour supprimer la récursivité gauche (indirecte!) de la grammaire Toy. On numérote les non-terminaux : A 1 A 2 b A 3 e A 2 A 1 a A 3 A 1 c i = 1 i = 2, j = 1 On remplace A 2 A 1 a

4 par A 2 A 2 b a A 3 e a et on enlève la récursivité directe cette fois : A 2 A 3 e a B 1 B 1 B 1 b a B 1 i = 3, j = 1 On remplace par A 3 A 1 c A 3 A 2 b c A 3 e c et on enlève la récursivité directe cette fois : A 3 A 2 b c B 2 B 2 B 2 e c B 2 i = 3, j = 2 On remplace par A 3 A 2 b c B 2 B 2 A 3 A 3 e a B 1 b c B 2 B 1 b c B 2 B 2 et on enlève la récursivité directe cette fois : A 3 d B 1 b c B 2 B 3 B 2 B 3 B 3 e a B 1 b c B 2 B 3 La grammaire non récursive est donc : A 1 A 2 b A 3 e A 2 A 3 e a B 1 B 1 A 3 d B 1 b c B 2 B 3 B 2 B 3 B 1 b a B 1 B 2 e c B 2 B 3 e a B 1 b c B 2 B 3

5 4 Analyse en descente récursive Voici un programme écrit en C (mais peu importe). La procédure avancer permet de lire un nouveau lexème, et la procédure verifieretavancer permet de tester si le lexème courant est celui passé en paramètre PUIS de lire un nouveau lexème. La variable lexemecourant contient, comme son nom l indique, la valeur du lexème en cours. void program (void) { verifieretavancer(debut); code(); verifieretavancer(fin); void code (void) { switch (lexemecourant) { case ENTIER: case NOM: case IMPRIME: case LIT: instlist(); void instlist (void) { instruction(); if (lexemecourant == POINT_VIRGULE) { instlist(); void instruction (void) { switch (lexemecourant) { case ENTIER: /* déclaration */ verifieretavancer(nom); case NOM: /* affectation */ verifieretavancer(deux_points_egal); verifieretavancer(entier); case IMPRIME: /* écriture */ verifieretavancer(parenthese_gauche); verifieretavancer(entier); verifieretavancer(parenthese_droite); case LIT: /* lecture */ verifieretavancer(parenthese_gauche); verifieretavancer(nom); verifieretavancer(parenthese_droite); int main (int argc, char *argv[]) {

6 program(); /* on teste la fin de chaine */ if (lexemecourant == FDF) fprintf(stdout, " mot du langage \ n " ); else fprintf(stdout, " mot n appartenant pas au langage " ); return -1; Donnez la grammaire algébrique (donc le quadruplet) correspondant à cet analy- Question : seur. Grammaire Alkol006 Axiome = program N = { program, code, instlist, instruction T = { début, fin, entier, nom, imprime, lit, ;, :=, (, ) program début code f i n code ν i n s t L i s t i n s t L i s t i n s t r u c t i o n i n s t r u c t i o n ; i n s t L i s t i n s t r u c t i o n e n t i e r nom nom := e n t i e r imprime ( e n t i e r ) l i t ( nom ) En fait, la production qui permet de dériver instruction en le vide ne devrait pas être là, mais j ai oublié de mettre un default dans le switch avec un message d erreur.... 5 Automate LL(2) Axiome = A N = { A, B, C T = { x, y, z A B x C y B z C z Grammaire ToyBis Question : Grâce à l algorithme de construction d un automate LL(k) du mémento, donnez l automate LL(2) de la grammaire ToyBis. q 0 = [S A ; { ] q 0 z x q 1 q 2 z x q 0 z y q 1 q 3 z y

7 q 1 = [S A ; { ] q 1 ν q 2 = [A B x ; { ] q 2 z x q 4 q 5 z x q 3 = [A C y ; { ] q 3 z y q 6 q 7 z y q 4 = [A B x ; { ] q 4 x q 8 q 5 = [B z ; { x ] q 5 z q 9 q 6 = [A C y ; { ] q 6 y q 10 q 7 = [C z ; { y ] q 7 z q 11 q 8 = [A B x ; { ] q 8 ν q 9 = [B z ; { x ] q 9 ν q 10 = [A C y ; { ] q 10 ν q 11 = [C z ; { y ] q 11 ν...