INF123 - Examen 12 mai 2016

Documents pareils
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)

Les chaînes de caractères

Chap III : Les tableaux

Algorithmique et Programmation, IMA

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

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Le prototype de la fonction main()

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

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Le langage C. Séance n 4

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

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

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

Programmation système en C/C++

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Java Licence Professionnelle CISII,

TP 1. Prise en main du langage Python

Définitions. Numéro à préciser. (Durée : )

Travaux Dirigés n 1 : chaînes de caractères

TP, première séquence d exercices.

Programmation système de commandes en C

Programmation système I Les entrées/sorties

Arguments d un programme

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

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

Utilisation d objets : String et ArrayList

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

Initiation à LabView : Les exemples d applications :

Premiers Pas en Programmation Objet : les Classes et les Objets

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

Cours Programmation Système

I. Introduction aux fonctions : les fonctions standards

TP : Gestion d une image au format PGM

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL


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

Conventions d écriture et outils de mise au point

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

Correction TD algorithmique

Introduction au langage C

Cours 1 : Qu est-ce que la programmation?

Description de Produit Logiciel. AMI News Monitor v2.0. SPD-AMINM-10 v1.0

Simulation d un système de paiement par carte bancaire

Algorithmique et programmation : les bases (VBA) Corrigé

Chapitre 10. Les interfaces Comparable et Comparator 1

Architecture des Systèmes d Information Architecture des Systèmes d Information

Les structures. Chapitre 3

Introduction à MATLAB R

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

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Structurer ses données : les tableaux. Introduction à la programmation

TP3 : Manipulation et implantation de systèmes de fichiers 1

GESTION DES FICHIERS C/UNIX

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

DIFFÉRENCE ENTRE UN COMPLÉMENT D OBJET DIRECT ET UN COMPLÉMENT D OBJET INDIRECT ACCORD DES PARTICIPES PASSÉS MARCEL PÈREZ 2001

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Chapitre 1 : La gestion dynamique de la mémoire

Feuille TD n 1 Exercices d algorithmique éléments de correction

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

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Cours 1: Java et les objets

Généralités sur le Langage Java et éléments syntaxiques.

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

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

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

TP1. Outils Java Eléments de correction

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

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

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

Rappels Entrées -Sorties

Chapitre 2. Eléments pour comprendre un énoncé

Principes des langages de programmation INF 321. Eric Goubault

Quelques algorithmes simples dont l analyse n est pas si simple

TP1 : Initiation à Java et Eclipse

GOL502 Industries de services

Plus courts chemins, programmation dynamique

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Initiation à la programmation en Python

Solutions du chapitre 4

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

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

Plan du cours Cours théoriques. 29 septembre 2014

Programme awk------introduction rapide


Compléments de documentation Scilab : affichage de texte et formatage de nombres

Cours Langage C/C++ Programmation modulaire

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

1 Description générale de VISFIELD

Programme Compte bancaire (code)

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

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

Les fichiers. Chapitre 4

Rappel sur les bases de données

Recherche dans un tableau

Transcription:

INF123 - Examen 12 mai 2016 Durée : 2h. Tout document interdit à l exception du mémo bash non annoté. Calculatrices, téléphones interdits. Le barème est indicatif. Pour chaque question, une partie des points peut tenir compte de la présentation. Toute réponse même incomplète sera valorisée à partir du moment où elle réalise au moins une partie de ce qui est demandé. Les questions ne sont pas indépendantes, mais peuvent être traitées dans un ordre quelconque à condition d avoir pris connaissance de l ensemble du sujet. Dans tous les cas vous pouvez utiliser les fonctions demandées dans les questions précédentes même si vous n avez pas réussi à les écrire. Vous pouvez utiliser les fonctions de la bibliothèque standard (strcmp, strcpy,...) vues en TD ou en TP. Préambule Dans cet examen, on vous demande de compléter (parties 1, 2, 3 et 5) et d utiliser (partie 4) un programme C qui vous est partiellement fourni en annexe. Il y est fait référence dans la suite via les numéros de lignes. Il vous est conseillé d en prendre connaissance, ainsi que de l ensemble des questions avant de commencer à composer. Le but du programme est de vérifier la correction syntaxique de phrases simples du français. Les mots des phrases appartiennent à différentes catégories : ce sont des articles, des noms, des adjectifs, des verbes (conjugués à la troisième personne du singulier), et des conjonctions de coordination. Partie 1. Les mots de chaque catégorie sont lus dans des fichiers (il y a un fichier pour les articles, un fichier pour les noms...) et stockés dans des ensembles de mots (il y a un ensemble d articles, un ensemble de noms...). Cette lecture est effctuée par la fonction initialiser appelée lignes 101 à 105. Partie 2. Les phrases sont lues ligne par ligne dans un fichier (une phrase par ligne), puis chaque phrase est lue mot par mot. Partie 3. À chaque mot est associée sa nature qui correspond à sa catégorie c est-à-dire à l ensemble de mots auquel il appartient. Les natures des mots sont les entrées d un automate reconnaisseur qui décide si la phrase est correcte ou non. Partie 4. Il s agit d écrire un script shell qui détecte les fichiers textes contenant des phrases incorrectes en utilisant le programme précédent. Partie 5. On traite le problème d homonymie (un même mot peut avoir plusieurs natures différentes). Pour cela, on calcule l intersection d ensembles de mots. Remarque : des constantes sont définies lignes 5 à 7 pour le nombre maximum de mots de chaque ensemble, la longueur maximum des mots et des lignes, et on supposera dans tout ce qui suit que ces constantes sont suffisamment grandes : vous n avez pas à traiter d éventuels problèmes de débordement. Partie 1 : Ensembles de mots ( 5 points) Les ensembles de mots sont mémorisés dans des variables de type ens mots (lignes 16 à 19) : le champ card est le cardinal de l ensemble, le champ tab est une séquence contiguë de chaînes de caractères entre les indices 0 et card-1 inclus. Chaque chaîne de l ensemble n apparait qu une fois, et la séquence n est pas triée. Question 1 : Dessinez un exemple de valeur de la variable noms (déclarée ligne 21) représentant l ensemble {crayon, chat, papillon, gendarme, potage, bateau}.

Question 2 : Écrivez les fonctions : init vide (lignes 23-25) qui initalise un ensemble vide. est vide (lignes 27-29) qui retourne 1 si e est vide, 0 sinon. chercher (lignes 31-33) qui recherche le mot m dans l ensemble e et qui retourne l indice où se trouve m s il est présent dans e, -1 sinon. ajouter (lignes 35-37) qui ajoute le mot m à l ensemble e, s il n est pas déjà présent. Les ensembles de mots sont lus à partir de fichiers textes. Par exemple, la variable noms pourra être initialisée à partir du fichier dont le contenu est le suivant : Question 3 : chat potage gendarme papillon crayon bateau Écrivez la fonction initialiser (lignes 39-41) qui initialise l ensemble de mots m à partir des mots contenus dans le fichier de nom nom fich. Si l ouverture du fichier est impossible, un message d erreur approprié est affiché et le programme se termine. Partie 2 : Lignes ( 5 points) Question 4 : Écrivez la fonction lire ligne (lignes 43-46) dont la spécification est la même que la fonction lire ligne de l interpréteur : f étant un descripteur de fichier ouvert en lecture, la fonction lit et stocke dans phrase la prochaine ligne de ce fichier sous la forme d une chaîne de caractères, c est-à-dire en remplaçant le \n par \0. Elle renvoie 0 si la fin de fichier est atteinte sans qu aucun caractère n ait été lu, 1 sinon. Nous appelons phrases les chaînes de caractères obtenues après lecture d une ligne par la fonction lire ligne. Une phrase est constituée de séquences de lettres appelées mots séparées par un ou plusiers espaces. Il n y a pas d autres caractères. On suppose que les phrases comportent au moins un mot, et il n y a pas d espace après le dernier mot. La fonction prochain mot (lignes 59-61) est appelée avec comme paramètre une chaîne de caractères phrase obtenue par la fonction lire ligne. Elle écrit dans son paramètre mot le prochain mot de phrase après l indice *ind cour, et met à jour cet indice en le plaçant après le mot lu. Plus précisément : avant l appel : *ind cour est l indice du début d un mot de phrase ou d une séquence d espaces précédant un mot, après-l appel : le mot a été stocké dans mot sous la forme d une chaîne de caractères (c est-à-dire avec un \0 à la fin. *ind cour est l indice du caractère qui suit le mot, phrase n a pas été modifiée. Les schémas ci-dessous montrent 2 exemples d exécution de prochain mot : AVANT phrase l e c h a t m a n g e l e g e n d a r m e \0 *indcour APRES mot l e \0 phrase l e c h a t m a n g e l e g e n d a r m e \0 *indcour 2

AVANT phrase l e c h a t m a n g e l e g e n d a r m e \0 *indcour APRES mot g e n d a r m e \0 phrase l e c h a t m a n g e l e g e n d a r m e \0 Figure 1 : deux exemples d exécution de prochain mot *indcour Question 5 : Écrivez la fonction prochain mot. Partie 3 : Automate reconnaisseur ( 5 points) La nature d un mot est donnée par l ensemble de mots (de type ens mots) auquel il appartient. Considérons par exemple les ensembles de mots suivants et la nature correspondante : Ensemble {bateau, chat, potage, crayon, gendarme, papillon} {mange, regarde, espere, dessine} {le, la, du, les} Figure 2 Nature NOM VERBE ARTICLE Si un mot n appartient à aucun ensemble, il a par convention la nature INCONNU. Avec les ensembles ci-dessus, c est par exemple le cas du mot lait. ARTICLE NOM VERBE ARTICLE NOM 0 1 2 3 4 5 Figure 3 Dans l automate ci-dessus, les entrées des transitions sont des natures de mots. Pour reconnaître si une phrase est correcte : on part de l état initial, successivement pour chaque mot, on effectue la transition associée à sa nature. la phrase est correcte si l état final est atteint à la fin de la phrase. Exemple : En ne considérant que les mots des ensembles de la figure 2 : Soit la phrase le chat mange du gendarme Elle correspond à la séquence de natures : ARTICLE NOM VERBE ARTICLE NOM qui est reconnue par l automate. La phrase est donc correcte. Soit la phrase chat mange du le gendarme Elle correspond à la séquence de natures : NOM VERBE ARTICLE ARTICLE NOM qui n est pas reconnue par l automate. La phrase n est donc pas correcte. Soit la phrase Elle correspond à la séquence de natures : le lait mange du chat 3

ARTICLE INCONNU VERBE ARTICLE NOM qui n est pas reconnue par l automate. La phrase n est donc pas correcte. Remarque : l automate ne tient pas compte des accords en genre ou en nombre. Par exemple, la phrase la chat mange les gendarme est considérée comme correcte. Question 6 : Dessinez l automate obtenu en ajoutant un nouvel état de numéro 6 vers lequel vont toutes les transitions qui ne sont pas dessinées sur l automate de la figure 3, en particulier les transitions étiquetées par INCONNU. Indication : l état 6 est un état puits, c est-à-dire que toutes les transitions issues de l état 6 mènent à l état 6. On souhaite maintenant reconnaître des phrases pouvant comporter des adjectifs et des conjonctions de coordinations : les noms peuvent être précédés ou suivis d un nombre quelconque d adjectifs. une phrase peut être constituée de propositions reliées par des conjonctions de coordination. Par exemple, en considérant les ensembles d adjectifs et de conjonctions suivants (en plus des ensembles de noms, verbes et articles de la figure 2) : Ensemble {petit, grand, beau, fort, intelligent, gros, bleu} {mais, ou, et, donc, or, ni, car} Figure 4 Nature ADJECTIF CONJONCTION on pourra maintenant reconnaître comme correctes des phrases telles que : le petit gros gendarme fort dessine le beau petit chat intelligent donc le grand papillon mange du potage bleu correspondant à la séquence de natures : ARTICLE ADJECTIF ADJECTIF NOM ADJECTIF VERBE ARTICLE ADJECTIF NOM ADJECTIF CONJONCTION ARTICLE ADJECTIF NOM VERBE ARTICLE NOM ADJECTIF Question 7 : En considérant l ensemble d entrées {ARTICLE, ADJECTIF, NOM, VERBE, CONJONCTION, INCONNU}, complétez l automate pour tenir compte des adjectifs et des conjonctions. Veillez à ce que de chaque état soit issue une et une seule transition pour chaque entrée possible. Remarque : Vous pouvez répondre aux questions suivantes (8 et 9) même si vous n avez pas su répondre à la question 7 : utilisez alors l automate de la question 6. Question 8 : Représentez la fonction de transition de votre automate par un tableau à deux dimensions dont les lignes sont indexées par les numéros des états (de 0 à 6), et les colonnes par les entrées. L automate est simulé dans la fonction analyse (lignes 63-78). L automate est représenté ainsi : les états sont les entiers 0, 1, 2,..., l état initial est l état 0, les entrées sont les constantes définies lignes 9 à 14, la fonction de transition est le tableau transition déclaré et initialisé dans la fonction analyse (lignes 65-67) : le premier indice est l état courant, le second est l entrée (l initialisation en C de ce tableau ne vous est pas demandée). De plus, la fonction nature mot (lignes 48-57) calcule la nature d un mot. Question 9 : La fonction analyse renvoie 1 si la chaîne phrase en argument est reconnue par l automate, 0 sinon. À l aide des fonctions prochain mot et nature mot, complétez cette fonction. 4

Partie 4 : Shell ( 2 points) Soient Articles, Noms, Adjectifs, Verbes, et Conjonctions les fichiers contenant respectivement les ensembles d articles, noms, adjectifs, verbes et conjonctions. Soit analyser le nom de l exécutable obtenu à partir du source donné en annexe et complété dans les parties 1 à 3. Question 10 : Écrivez un script shell qui prend en arguments un ou plusieurs noms de fichiers contenant des phrases et qui affiche pour chacun d eux : les phrases du fichier <nom du fichier> sont correctes si toutes les phrases du fichier son correctes le fichier <nom du fichier> contient au moins une phrase incorrecte sinon. De plus, le script affichera un message d erreur si aucun argument ne lui est fourni, ou si un des arguments n est pas le nom d un fichier existant. Indications : Si toutes les phrases du fichier analysé sont correctes, le programme analyser ne produit pas d affichage. Sinon, une ligne est affichée par l instruction de la ligne 113. On rappelle (cf memo-bash) que le test [ -n <cha^ıne> ] vaut vrai si la chaîne n est pas vide. Partie 5 : Intersection d ensembles ( 3 points) Considérons les ensembles de noms, d adjectifs et de verbes suivants : Ensemble {chat, papillon, gendarme, potage, rose, porte} {petit, grand, gros, beau, fort, intelligent, rose} {mange, regarde, espere, dessine, porte} Figure 5 Nature NOM ADJECTIF VERBE Ainsi, il est possible qu un même mot soit à la fois NOM et ADJECTIF (comme rose) ou à la fois NOM et VERBE (comme porte) Question 11 : Écrivez une fonction de profil void intersection(ens mots *A, ens mots *B, ens mots *C) (lignes 80-82) qui construit dans C l intersection des ensembles A et B. Indications Utilisez les fonctions sur les ensembles de mots de la partie 1. Les ensembles ne sont pas triés. Un algorithme possible est le suivant : pour chaque élément de A, on cherche s il est dans B, si oui, on l ajoute à C. Question 12 : Complétez la fonction main en signalant par un message si les ensembles des noms et des adjectifs, ou si les ensembles des noms et des verbes, ont une intersection non vide (on ne teste pas d autres intersections d ensembles). Ne recopiez pas toute la fonction main, indiquez les modifications apportées à l aide des numéros de lignes. Bonus : intersection de séquences triées ( 2 points) Par abus de langage, on dira qu un ensemble représenté par une variable E de type ens mots est trié si le champ tab de E est un tableau trié. On suppose ici que les ensembles de mots sont triés selon l ordre lexicographique. On souhaite calculer l intersection de deux ensembles triés, et on veut que le résultat soit trié. Question 13 : a) La fonction intersection de la question 11 répond-elle au problème (c est-à-dire, si A et B sont triés, est-ce que C l est)? Justifiez votre réponse b) En tirant parti du fait que A et B sont triés, écrivez une nouvelle fonction C intersection triee (lignes 84-86) plus efficace. 5

On rappelle que la comparaison selon l ordre lexicographique des chaînes de caractères s effectue avec la fonction int strcmp(char ch1[], char ch2[]) dont le résultat est négatif, nul ou positif selon que ch1 est avant ch2, égal à ch2, ou après ch2 dans l ordre lexicographique. 6

Annexe 1 #i n c l u d e <s t d i o. h> 2 #i n c l u d e <s t d l i b. h> 3 #i n c l u d e <s t r i n g. h> 4 5 #d e f i n e NB MAX MOTS 1024 6 #d e f i n e LG MAX MOTS 64 7 #d e f i n e LG MAX LIGNE 1024 8 9 #d e f i n e ARTICLE 0 10 #d e f i n e ADJECTIF 1 11 #d e f i n e NOM 2 12 #d e f i n e VERBE 3 13 #d e f i n e CONJONCTION 4 14 #d e f i n e INCONNU 5 15 16 t y p e d e f s t r u c t { 17 char tab [NB MAX MOTS ] [ LG MAX MOTS] ; 18 i n t card ; 19 } ens mots ; 20 21 ens mots a r t i c l e s, a d j e c t i f s, noms, verbes, c o n j o n c t i o n s ; 22 23 void i n i t v i d e ( ens mots e ) { 24 / A COMPLETER Q2 / 25 } 26 27 i n t e s t v i d e ( ens mots e ) { 28 / A COMPLETER Q2 / 29 } 30 31 i n t c h e r c h e r ( ens mots e, char m[ ] ) { 32 / A COMPLETER Q2 / 33 } 34 35 void a j o u t e r ( ens mots e, char m[ ] ) { 36 / A COMPLETER Q2 / 37 } 38 39 void i n i t i a l i s e r ( ens mots e, char nom fich [ ] ) { 40 / A COMPLETER Q3 / 41 } 42 43 / meme spec que dans l i n t e r p r e t e u r / 44 i n t l i r e l i g n e ( FILE f, char phrase [ ] ) { 45 / A COMPLETER Q4 / 46 } 47 48 i n t nature mot ( char mot [ ] ) { 49 i n t nature ; 50 i f ( c h e r c h e r (& a r t i c l e s, mot)!= 1) nature = ARTICLE ; 51 e l s e i f ( c h e r c h e r (& a d j e c t i f s, mot)!= 1) nature = ADJECTIF ; 52 e l s e i f ( c h e r c h e r (&noms, mot)!= 1) nature = NOM ; 53 e l s e i f ( c h e r c h e r (&verbes, mot)!= 1) nature = VERBE ; 54 e l s e i f ( c h e r c h e r (& c o n j o n c t i o n s, mot)!= 1) nature = CONJONCTION ; 55 e l s e nature=inconnu ; 56 r e t u r n nature ; 57 } 58 59 void prochain mot ( char phrase [ ], i n t ind cour, char mot [ ] ) { 60 / A COMPLETER Q5 / 61 } 62 63 i n t a n a l y s e ( char phrase [ ] ) { 64 / i n i t i a l i s a t i o n du t a b l e a u t r a n s i t i o n ( non demandee ) / 65 i n t t r a n s i t i o n [... ] [... ] ={ 66... 67 } ; 68 i n t i =0 ; 69 char mot [LG MAX MOTS] ; 70 i n t e t a t c o u r=0 ; 71 i n t e t a t s u i v ; 72 i n t e n t r e e ; 7

73 74 w h i l e ( phrase [ i ]! = \ 0 ) { 75 / A COMPLETER Q9 / 76 } 77 r e t u r n ( e t a t c o u r==/ A COMPLETER Q9 /) ; 78 } 79 80 void i n t e r s e c t i o n ( ens mots A, ens mots B, ens mots C) { 81 / A COMPLETER Q11 / 82 } 83 84 void i n t e r s e c t i o n t r i e e ( ens mots A, ens mots B, ens mots C) { 85 / A COMPLETER Q13 / 86 } 87 88 i n t main ( i n t argc, char argv [ ] ) { 89 FILE f ; 90 char phrase [ LG MAX LIGNE ] ; 91 i n t o k l i g n e =1 ; 92 i n t ok syntaxe ; 93 94 i f ( argc!=7) { 95 f p r i n t f ( s t d e r r, syntaxe %s f i c h i e r a r t i c l e s f i c h i e r n o m s 96 f i c h i e r a d j e c t i f s f i c h i e r v e r b e s f i c h i e r c o n j o n c t i o n s 97 f i c h i e r p h r a s e s \n, argv [ 0 ] ) ; 98 e x i t ( 1 ) ; 99 } 100 101 i n i t i a l i s e r (& a r t i c l e s, argv [ 1 ] ) ; 102 i n i t i a l i s e r (&noms, argv [ 2 ] ) ; 103 i n i t i a l i s e r (& a d j e c t i f s, argv [ 3 ] ) ; 104 i n i t i a l i s e r (&verbes, argv [ 4 ] ) ; 105 i n i t i a l i s e r (& c o n j o n c t i o n s, argv [ 5 ] ) ; 106 107 f=fopen ( argv [ 6 ], r ) ; 108 w h i l e ( o k l i g n e ) { 109 o k l i g n e=l i r e l i g n e ( f, phrase ) ; 110 i f ( o k l i g n e ) { 111 ok syntaxe=a n a l y s e ( phrase ) ; 112 i f (! ok syntaxe ) { 113 p r i n t f ( l a phrase [ %s ] n e s t pas c o r r e c t e \n, phrase ) ; 114 } 115 } 116 117 } 118 r e t u r n 0 ; 119 } 8