11.Grammaire et Langage - Montefiore Institute ULgdumont/pdf/ac10.pdf · Par tableau Entrée =...
-
Upload
truongtruc -
Category
Documents
-
view
235 -
download
0
Transcript of 11.Grammaire et Langage - Montefiore Institute ULgdumont/pdf/ac10.pdf · Par tableau Entrée =...
Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Tables et Hachage
Ulg, 2009-2010R.Dumont
� Table = Ensemble d'entrées.� Entrées = Couples de type (clef, information)
TablesTablesTablesTables
� Par tableau◦ Entrée = (indice, données)� char Ville[25]� Ville[5] = "Liège"◦ Recherche par "accès directe", O(1)
� Par tableaux non ordonnés◦ Entrée = (données, données)
char Ville[25]
Tables Tables Tables Tables ---- ReprésentationReprésentationReprésentationReprésentation
� char Ville[25]� int CP[4]◦ Recherche "séquentielle", O(n)
� Par tableaux ordonnés◦ Entrée = (données, données)� char Ville[25]� int CP[4]◦ Recherche "dichotomique", O(log n)
� Compromis Temps-Espace◦ Problème de la Table = perte d'espace si U >> K◦ Table de hachage = table limitée au nécessaire
� Principe ◦ Une table T contient des alvéoles (=cases de T)◦ Une fonction (de hachage) permettant de répartir
(distribuer) les informations à partir de leur clé dans T
Tables de hachageTables de hachageTables de hachageTables de hachage
(distribuer) les informations à partir de leur clé dans T est de la forme
h : U � [0..m-1]◦ Pour chaque clé k de U, la fonction de hachage renvoie
h(k), qui désigne une des m alvéoles de T.� En théorie, chaque clé doit avoir autant de chance d’être
hachée vers n'importe quelle des cases de T◦ On dit que h(k) est le haché (condensé, résumé,…) de k.
FonctionnementFonctionnementFonctionnementFonctionnement
Algorithmes et Structures de données, B. Jacob, 2010, INF601, Université Le Mans
� Au lieu de U valeurs à réserver lors de la déclaration de T (cas de la table), on se contente de m possibilités (cas de la table de hachage)◦ m fixé par la fonction de hachage ◦ Besoin réduit en espace◦ Mais problème si deux clés ont le même haché (plusieurs
hachés pour une même alvéole)
Tables de hachageTables de hachageTables de hachageTables de hachage
hachés pour une même alvéole)� Problème de collision collision collision collision (voir k2 et k5)
� Solution :◦ Eviter les collisions ?� Par définition, impossible (car |U| > m et h est
déterministe)� En pratique, utilisation de fonctions de hachage
"aléatoires" qui diminue les collisions
Tables de hachage Tables de hachage Tables de hachage Tables de hachage ---- CollisionsCollisionsCollisionsCollisions
"aléatoires" qui diminue les collisions� Mais phénomène impossible à juguler, donc…◦ Gestion des collisions� Chainage� Adressage ouvert
� Chaque alvéole pointe sur une liste chainée contenant les éléments de même haché
Tables de hachage Tables de hachage Tables de hachage Tables de hachage ---- ChainageChainageChainageChainage
� Chaque alvéole de T pointe vers◦ une liste d'éléments, ou◦ NIL
� Taux de remplissage de T (contenant M alvéoles et N éléments) ◦ = N/M = α◦ = Nombre moyen d'éléments stockés dans une chaine
� Les performances moyennes du hachage dépendent de la manière avec laquelle la fonction de hachage h répartit en moyenne l’ensemble des clés à stocker parmi les m alvéoles.◦ Propriété de répartition uniforme
Si la fonction de hachage valide cette propriété,
Tables de hachage Tables de hachage Tables de hachage Tables de hachage ---- ChainageChainageChainageChainage
� Si la fonction de hachage valide cette propriété, on démontre que l'opération de recherche s'effectue en temps constant, soit O(1).
� Insertion et suppression sont également O(1), si listes doublement chainées.
� Permet α > 1
� Plusieurs techniques :◦ Méthode de la division� h(k) = k mod m� Choix du m :
� Éviter les puissances de 2Premier, sans être proche trop d'une puissance de 2
Hachage Hachage Hachage Hachage ---- FonctionsFonctionsFonctionsFonctions
� Premier, sans être proche trop d'une puissance de 2
� Exemple :� N = 2000 chaines de caractères, chainage souhaité de
maximum 3 éléments� M = 701, car premier, proche de 2000/3, distant de 512
et 1024
◦ Méthode de la multiplication� h(k) = ⌊m(k.A mod 1)⌋� avec 0<A<1 de la forme s/2w et où w représente la
taille des mots sur une machine donnée� Knuth : A proche de (√5 -1)/2 = 0.618033…
� m est du type 2p
Hachage Hachage Hachage Hachage ---- FonctionsFonctionsFonctionsFonctions
� m est du type 2p
◦ Exemple� Soit k =123456, w =32, p=14 (� m=16384)� A proche de (√5 − 1)/2, soit A =2654435769/232
� h(k) = ⌊214(123456. 2654435769/232 mod 1)⌋=67
� Les alvéoles ne contiennent qu'au plus un élément
� On remplit la table alvéole par alvéole.◦ Conséquence : la table peut être pleine◦ Taux de remplissage < 1
� Il n'y a plus de pointeurs de liste◦ L'espace mémoire libéré est utilisé pour la table
Adressage OuvertAdressage OuvertAdressage OuvertAdressage Ouvert
◦ L'espace mémoire libéré est utilisé pour la table◦ Conséquence : + d'alvéoles, moins de collisions
� Insertion◦ Sondage jusqu'à trouver une alvéole vide� Sondage linéaire� Sondage quadratique� Double hachage
� h(k,i) = (h'(k)+i) mod m◦ h'(k) est appelé fonction de fonction de fonction de fonction de
hachage auxiliairehachage auxiliairehachage auxiliairehachage auxiliaire◦ Principe :
� On sonde d'abord T[h'(k)]. Si vide, on insère k dans cette alvéole.
� Sinon, on sonde T[h'(k)+1],
Adressage Ouvert Adressage Ouvert Adressage Ouvert Adressage Ouvert –––– S. linéaireS. linéaireS. linéaireS. linéaire
� Sinon, on sonde T[h'(k)+1], etc. jusqu'à T[m-1], puis on revient à T[0], T[1],… jusque T[h'(k)-1].
� Problème des grappes fortesgrappes fortesgrappes fortesgrappes fortes(primary clustering)◦ Groupes de blocs consécutifs
occupés� Augmentation du temps de
recherche� Utilisable jusqu'à α <0.75
Jean-Eric Pin, Liafa, Jussieu, 1998
Sondage quadratiqueSondage quadratiqueSondage quadratiqueSondage quadratique
� h(k, i) = (h'(k) + c1i + c2i2) mod mavec h’ la fonction de hachage auxiliairei = 0, 1, . . . , m − 1, c1 et c2 ≠ de 0Dépend de i et non de la clé� Dépend de i et non de la clé◦ Problème des grappes faibles grappes faibles grappes faibles grappes faibles (secondary clustering)� Suite d'alvéoles occupées par des clés de même valeur
de hachage
� Utilisable si α <0.5
Double hachageDouble hachageDouble hachageDouble hachage
� h(k, i) = (h1(k) + i.h2(k)) mod m� Évite les regroupement autour de i+1
� Exemple (avec m=13, k=14)◦ soit h1(k)=k mod 13 et h2(k) =1+(k mod 11)◦ Donc, h (14) = 1 et h (14) = 4 ◦ Donc, h1(14) = 1 et h2(14) = 4 ◦ h(14, 0) = h1(14) = 1
� case occupée◦ h(14, 1) = (h1(14) + h2(14)) mod 13 = 5
� case occupée◦ h(14, 2) = (h1(14) + 2 × h2(14)) mod 13 = 9
� case libre
� Dépend de la clé et non plus de i
Conclusion Conclusion Conclusion Conclusion ---- En pratiqueEn pratiqueEn pratiqueEn pratique
� Une fonction de hachage transforme la valeur d'un élément (la clé) en l'indice d'une table◦ Elle doit être déterministe◦ Elle doit être facilement calculable
� Difficulté : répartir le plus uniformément possible les valeurs de hachage
� En pratique, une bonne fonction de hachage permet à 2 clés de motifs très proches d’avoir des valeurs de hachage très différentes
� Exemple (MD5 – 128 bits)◦ "tester" : f5d1278e8109edd94e1e4197e04873b9◦ "Tester" : 3095c3e4f1465133e5e6be134eb2ebe2 ◦ "testera" : a91fb03faec54384901f13f01d2ba0e3
Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Langage et grammaire
Ulg, 2009-2010R.Dumont
� Langage = ensemble de chaines de caractères� Chaines de caractères = les phrases du
langage� Chaque phrase possède une structurestructurestructurestructure◦ qui peut être décrite par un arbrearbrearbrearbre
LangageLangageLangageLangage
◦ qui peut être décrite par un arbrearbrearbrearbre◦ dont les règles de construction sont définies par
une grammairegrammairegrammairegrammaire� Exemple : langage de programmation◦ Phrases = les programmes◦ Programme = chaine constituée de mots ◦ Mot = séquence de caractères dont la structure est
spécifiée par une grammaire.
� Exemple : ◦ en français, une phrase valide est formée par un
sujet suivi d'un verbe (cas général).◦ Grammaire (simplifiée)� Phrase = sujet verbe� Sujet = "Pol" | "Sophie"
Verbe = "mange" | "dort"
Langage et SyntaxeLangage et SyntaxeLangage et SyntaxeLangage et Syntaxe
phrase
� Verbe = "mange" | "dort"◦ Fournit � Pol mange� Sophie mange� Sophie dort� Pol dort
� Dont l'arbre syntaxique est donné ci-contre
sujet verbe
Pol dort
� Pour une expression plus complexe, le principe reste identique, mais l'arbre se complexifie
� Soit la grammaire suivante◦ A := "id" "=" E◦ E := T | E "+" T
Langage Langage Langage Langage A
id = E
E + T
T
F
T * E
F T◦ E := T | E "+" T◦ T := F | T "*" E◦ F := "id" | "cst" | "(" E ")"◦ Peut par exemple fournir
� id = id� id = cst� id = (id + cst) + cst * id
� Dont l'arbre syntaxique est donné ci-contre
� …
( E )
E + T
T F
F
id
cst
cst F
id
� Règle d'une grammaireT := n� Où
� T est un symbole non terminal� n est une chaine composée de terminaux (lexèmes, tokens,
jetons) ouououou de non-terminaux (variables)
Définition d'une grammaire:
Grammaire et Grammaire et Grammaire et Grammaire et tokenstokenstokenstokens
� Définition d'une grammaire: ◦ collection de règles permettant de substituer un non-
terminal par une suite de symboles (terminaux et non-terminaux)
� Définition d'un token:◦ Symbole terminal représentant la plus petite unité
lexicale d'un langage.
� métalangage utilisé pour décrire un autrelangage
� Inventé par John Backus pour décrire Algol 58 (simplifié par la suite par Peter Naur)
� Règles d'écriture◦ ::= "est défini comme"
BNF (BNF (BNF (BNF (BackusBackusBackusBackus NaurNaurNaurNaur FormFormFormForm))))
◦ ::= "est défini comme" ◦ | "ou" ◦ < > encadrent les symboles non-terminaux (par
opposition aux terminaux représentés tel-quel). ◦ On encadre par " " les symboles terminaux d’un seul
caractère.
� Exemple pour un programme écrit dans un langage élémentaire :
<programme> ::= PROGRAMME <suite_de_declarations> debut <suite_d_instructions> fin ;
◦ Mot clef "PROGRAMME" suivi de déclarations, suivi du mot-clef "debut", suivi par des instructions, suivi du mot-clef "fin" et d'un point-virgule.
Simplifications d'écriture par deux constructions
BNF (BNF (BNF (BNF (BackusBackusBackusBackus NaurNaurNaurNaur FormFormFormForm))))
"fin" et d'un point-virgule.� Simplifications d'écriture par deux constructions
supplémentaires (� EBNFEBNFEBNFEBNF) :◦ {x} exprime la répétition : zéro, une ou plusieurs
occurrences de x.� Par exemple pour un nom qui doit commencer par une lettre de
l’alphabet pouvant être suivie par tout autre caractère : � <identifiant> ::= <lettre> { <lettre> | <digit> }◦ [x] exprime l'option : zéro ou une occurrence de x.
� <clause_si> ::= si <oui_ou_non> alors <suite_d_instructions> [ sinon <suite_d_instructions> ] fin si ;
� Définition des listes� expression, expression_list, target_list,
Retour à PythonRetour à PythonRetour à PythonRetour à Python
� expression, expression_list, target_list, old_expression sont également définis…
Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Compilateur et interpréteur
Ulg, 2009-2010R.Dumont
� Problème : langage humain VS langage machine
Compilateur Compilateur Compilateur Compilateur ---- InterpréteurInterpréteurInterpréteurInterpréteur
Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/
� Solution : langage de programmation◦ Ada Lovelace : premier programme informatique
� Machine Analytique de Babbage (1843)
Langage de programmationLangage de programmationLangage de programmationLangage de programmation
◦ Années 50 : premiers langages "modernes" répandus� FORTRAN : FORmula TRANslator (Backus)� LISP : LISt Processor (McCarthy)� COBOL : Common Business Oriented Language (Hopper)� ALGOL 60 : ALGOrithmic Language
� Le langage de programmation permet l’écriture (et a fortiori la lecture) du code source par un humain (le programmeur)
� Evolution constante
Langage de programmationLangage de programmationLangage de programmationLangage de programmation
� Evolution constante◦ Versioning (PHP 4 � PHP 5)◦ Réactualisation d'anciens langages (COBOL �
COBOL 2002)◦ Héritage historique (LISP � Scheme)
� � Se comptent par centaines
� Un CPU ne peut pas exécuter un code source 'brut'.
� Celui-ci doit être traité préalablement◦ Transformé (compilation)◦ Evalué (interprétation)
ExécutionExécutionExécutionExécution
◦ Evalué (interprétation)
Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/
� Programme qui transforme du code source (en entrée) en du code exécutable par une machine (en sortie)
CompilateurCompilateurCompilateurCompilateur
� L'exécutable sera ensuite utilisé pour traiter les données (en entrée) afin de fournir des résultats (en sortie)
Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/
� Compilateurs classiques◦ C, JAVA
� En C
CompilateurCompilateurCompilateurCompilateur
Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/
� Programme qui prend un code source et des données (en entrée) et l’exécute directement afin de fournir des résultats (en sortie)
� Interpréteurs classiques◦ Ruby
InterpréteurInterpréteurInterpréteurInterpréteur
◦ Ruby◦ Shells Unix
� Comp. Vs Interp.◦ Rapidité d’exécution◦ Souplesse d'utilisation◦ Facilité de développement
Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/
� Couche supplémentaire entre le code source et la machine physique
� Objectif : meilleure portabilité ◦ Indépendance de la machine (cf. problème compilateurs C
p.ex.)Interpréteur pour le langage machine
Machine virtuelle ?Machine virtuelle ?Machine virtuelle ?Machine virtuelle ?
� Interpréteur pour le langage machine� Services : ◦ Exécution◦ Gestion de la mémoire◦ Chargement dynamique◦ Parallélisme, synchronisation, gestion des ressources
� Java utilise notamment ce principe
Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur
Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/
� Analyse Lexicale◦ Extraire les jetons du flux de caractères que
représente le code source◦ Exemple : for(i=0;i<N;i++){printf("%d\n",i);} � Mot clé "for"
Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur
� Symbole "("� Identifiant "i"� Symbole "="� Entier "0"� Symbole ";"� etc.
� Analyse Syntaxique◦ Reconstruire la structure syntaxique à partir des
lexèmes◦ Les règles syntaxiques d'un langage sont décrites
dans sa grammairegrammairegrammairegrammaire.Exemple : « Mon frère étudie. »
Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur
� Exemple : « Mon frère étudie. »
Mon frère étudie .
Article défini Nom communVerbe
conjuguéSymbole de terminaison
Groupe nominal sujet
Groupe verbalSymboles de ponctuation
Phrase
� Analyse Sémantique◦ Vérification du sens et de sa cohérence� Exemple : « Le ciel mange une télévision.»
� Syntaxe : OK� Sens : NOK
� Génération du code
Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur
� Génération du code◦ Code dans le langage demandé grâce aux informations
fournies par les étapes précédentes◦ Eventuellement en plusieurs étapes� Langage intermédiaire
� Si le langage initial est très éloigné du langage cible� Compilateur optimisant
� Compilateur dont on peut spécifier l'architecture de la machine cible
Structure d'un interpréteurStructure d'un interpréteurStructure d'un interpréteurStructure d'un interpréteur
Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/
• La La La La SyntaxeSyntaxeSyntaxeSyntaxe:::: la forme (ou structure) des expressions
• La La La La SémantiqueSémantiqueSémantiqueSémantique:::: la signification des expressions
• La définition d'un langage est donnée par sasyntaxe etetetet sa sémantique
En résuméEn résuméEn résuméEn résumé
syntaxe etetetet sa sémantique– Qui utilise la définition?
• Les concepteurs
• Ceux qui effectuent l'implémentation
• Les programmeurs (usagers)