ift313 introduction aux langages formels froduald kabanza département dinformatique université de...

25
IFT313 Introduction aux langages formels Froduald Kabanza Département d’informatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ ift313 Automates à pile

Upload: dieudonne-vaillant

Post on 03-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

IFT313Introduction aux langages formels

Froduald Kabanza

Département d’informatique

Université de Sherbrookeplaniart.usherbrooke.ca/kabanza/cours/ift313

Automates à pile

Page 2: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

2IFT313

Sujets

• C’est quoi un automate à pile ?

• Quel est le langage accepté par un automate à pile?

• Quelle est la correspondance entre un automate à pile et une gram-maire hors-contexte?

• Quelle est la correspondance entre un automate à pile et un automate fini?

Page 3: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

3IFT313

Objectifs

• Savoir décrire un automate à pile acceptant un langage donné ?

• Savoir simuler l’exécution d’un automate à pile ?

• Exprimer le pouvoir d’expressivité d’un automate à pile ?

Page 4: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

IFT313 © Froduald Kabanza

4

Rappel- Le problème d’analyse syntaxique (parsing) est :

- étant donné une chaîne de lexèmes (tokens) et une grammaire- déterminer si oui ou non la chaîne est dérivable de la grammaire - et si oui, donner la séquence de dérivation ou un arbre d’analyse (ou un

arbre syntaxique). - Exemple : est-ce que (num + num) * num est syntaxiquement correcte?

Exp

Symbole de départProductions1. Exp → num2. Exp → ( Exp ) 3. Exp → Exp + Exp4. Exp → Exp * Exp

Exp * Exp

Exp * num

(Exp + Exp) * num

(Exp + num) * num

(num + num) * num

(Exp) * num

Þ

Þ

Þ

ÞÞ

Þ

Exp

Exp * Exp

num

num

num

Exp( )

Exp + Exp

Grammaire Dérivation Arbre d’analyse

Page 5: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

5IFT313

Automate à pile

- L’approche pour analyser la syntaxe du code source d’un programme est de scan-ner le programme de gauche à droite, en cherchant une dérivation qui génère ce programme.

- Le modèle de base d’un programme qui fait une telle analyse est un automate à pile (en anglais: pushdown automaton ou stack automaton).

- C’est une généralisation de la notion d’automate fini à des grammaires hors-contexte.

- Comme expliqué auparavant, les automates finis peuvent analyser seulement la syntaxe d’une grammaire régulière.

- Pour analyser la syntaxe d’une grammaire hors-contexte, nous ajoutons une pile à un automate fini pour obtenir un modèle de programmes plus puissant connu sous le nom de “automate à pile”.

Page 6: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

6IFT313

Modèle général- Dans cette leçon on voit une modèle générale d’automate à pile, valide pour les

grammaires hors-contexte en général.

- Par la suite nous verrons des modèles d’automates à pile LL et LR, qui corres-pondent, respectivement aux analyseurs syntaxiques LL et LR, c-à-d., à des sous-ensembles de grammaires hors-contexte pouvant être analysés efficacement.

- En fait nous verrons que des parseurs LL et LR ne sont rien d’autres que des auto-mates à piles implémentés efficacement.

- Nous verrons aussi comment ces parseurs peuvent être générés automatiquement à partir d’une grammaire.

- D’ici là, nous utiliserons des exemples artificiels très simples.

Page 7: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

7IFT313

Limite des automates finis

- Nous avons vu qu’un automate fini est un modèle de programme avec un nombre fini d’états.

- Par conséquent, il a nombre fini d’actions ou transitions qu’il peut effectuer.

- Comme il a un nombre fini d’états et de transitions, il est très simple à programmer et même à visualiser graphiquement.

- Par contre il ne peut pas analyser le langage généré par une grammaire hors-contexte.

- Il peut seulement analyser le langage généré par une grammaire régulière.

Page 8: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

8IFT313

Automate à pile- Un automate à pile ressemble à un automate fini. Il a :

- un flux (stream) de lecture et un pointeur vers le prochain symbole (lexème/to-ken) à lire;

- un nombre fini d’états, y compris un état initial et des états accepteurs;- une relation de transition.

- La différence est qu’un automate à pile a en plus une pile, initialement vide, mais pouvant croître arbitrairement.

- Le contenu de la pile fait partie de la configuration (~ état) d’un automate.

- Donc un automate à pile a potentiellement un nombre infini de configura-tions (~ d’états).

Page 9: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

9IFT313

Automate à pile

- Un automate à pile a : - Une entrée et une tête de lecture.- Un nombre fini d’états dont un état initial et des états accepteurs. - Une relation de transition.- Une pile pouvant croître arbitrairement.- Un alphabet d’entrée (terminaux d’une grammaire);- Un alphabet de la pile (terminaux et non terminaux d’une grammaire)

Automate à pile

entrée

pile

$

$

Page 10: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

10IFT313

Automate à pile

- L’entrée est une chaîne de tokens scanné à partir du code source du programme à analyser.

- La pile contient une chaîne de symboles de l’alphabet de la pile (terminaux et non-terminaux de la grammaire)

- Les transitions indiquent comment mettre à jour le contenu de la pile en fonction du token courant.

Automate à pile

entrée

pile

1

2

3

4

$

$

Page 11: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

11IFT313

Automate à pile- Comment définir un automate à pile correspondant à une grammaire?

- Le principe de base est de mettre sur la pile des symboles de la grammaire qui correspondent (match) au préfixe de l’entrée lue jusque là et d’utiliser cette in-formation d’une certaine façon pour déterminer la production à appliquer à la prochaine étape de dérivation.

- Ceci deviendra clair avec des exemples.

Automate à pile

entrée

pile

1

2

3

4

$

$

Page 12: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

12IFT313

Automate à pile : définition formelle- Un automate à pile non-déterministe (ou simplement automate à pile) est un tuple :

M = (S,V,A,R,s0,F,$), tel que :

• S est une ensemble fini d’états.• V est l’alphabet de la pile • A est l’alphabet d’entrée • R: (S × A*× V*) (S × V*) est la relation de transitions

Autrement dit, la relation spécifie pour chaque état dans S, sous-chaîne lue de l’entrée (A*) et sous-

chaîne en haut de la pile (V*), le prochain état (dans S) et la sous-chaîne à mettre au sommet de la

pile à la place de celle dans l’antécédent de la relation.

• s0 (dans S) est l’état initial.

• F (inclus dans S) est un ensemble d’états accepteurs.• $ est le symbole initialement au fond de la pile et dénote aussi la fin de l’en-

trée (fin de fichier).

Page 13: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

13IFT313

Transitions- Une transition de la forme (p, u, ) (b q, )g signifie que l’automate peut passer de

l’état p à l’état q, pourvu que la chaîne d’entrée commence par le préfixe u et le la chaîne b est au sommet de la pile. Après la transition, u est lu et consommé du mot d’entrée, b est enlevé de la

pile et remplacé par g, et le nouvel état devient q. La chaîne b est lue de gauche à droite : son premier caractère doit donc être au

sommet de la pile. La chaîne g est écrite de telle façon que son premier caractère soit au sommet

de la pile.

entrée

pile

p q

$

$

entrée

pile

p q

$

$

u u

b g

Page 14: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

14IFT313

Configurations, trace, acceptation

- La configuration d’un automate est un triplet (S, V*, A*), indi-quant, respectivement, son état courant, le contenu de la pile, et la partie de l’entrée qui reste à lire.

- Une trace (ou exécution) d’un automate sur une entrée est la séquence de configurations qu’il produit en lisant son entrée et en suivant ses transitions.

- Une exécution accepte une chaîne d’entrée si la dernière configuration est de la forme (p, $, $), avec p un état accep-teur.

En d’autre mot, dans la dernière configuration, la pile est vide, on est à la fin de l’entrée et l’état est accepteur.

Page 15: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

15IFT313

Automates à pile déterministe

- Un automate à pile est déterministe s’il a une seule exécution possible pour toute entrée donnée.

- Sinon, il est non-déterministe.

- Contrairement aux automates finis, il n’est pas toujours possible d’avoir un automate à pile déterministe correspondant à un automate à pile non-dé-terministe.

- Les analyseurs lexicaux pratiques (inclus ceux que nous allons étudier) sont basés sur des automates à pile déterministes.

- Pour toute grammaire hors-contexte, il existe un automate à pile non-dé-terministe acceptant le langage généré par la grammaire.

Page 16: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

16IFT313

Exemple 1

- M = (S,V,T,R,s,S,$), tel que:• S = {s,p}• V = {A}• T = {a,b}• R = { (s, a, ε) (s, A),

(s, ε, $) (p, ε),

(s, b, A) (p, ε),

(p, b, A) (p, ε)}

- La deuxième transition est inutile.- En la supprimant on obtient un au-

tomate déterministe équivalent.

G = (V,A,R,S), tel que :

V = {S}

A = {a,b}

R = {S ® ε, S ® aSb}

- L(G) = {an bn | n >= 0},

c-à-d., chaîne commençant par des a suivi d’autant de b.

- Automate à pile non-déterministe correspond à la grammaire

Page 17: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

17IFT313

Exemple 1 (représentation graphique)

- M = (S,V,T,R,s,S,$), tel que:• S = {s,p}• V = {A}• T = {a,b}• R = { (s, a, ε) (s, A),

(s, b, A) (p, ε),

(p, b, A) (p, ε)}

- L(M) = {an bn | n >= 0}

Représentation graphique de l’automate

s p

a, ε/A b, A/ε

b, A/ε

Page 18: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

18IFT313

Exemple 1 (Exécutions)

- M = (S,V,T,R,s,S,$) :• S = {s,p}• V = {A}• T = {a,b}• R = { (s, a, ε) (s, A),

(s, ε, $) (p, ε),

(s, b, A) (p, ε),

(p, b, A) (p, ε)}

- L(M) = {an bn | n ≥ 0}

Rappel : configuration: (état, pile, reste-de-l’entrée)

Entrée: aabb

(s, $, aabb$)(s, $A, abb$)(s, $AA, bb$)(p, $A, b$)(p, $, $)

Entrée: aabbb

(s, $, aabbb$)(s, $A, abbb$)(s, $AA, bbb$)(p, $A, bb$)(p, $, b$)

Accepte

Rejette. Aucune autre exécution n’accepte.Donc, aabbb n’est pasdans le langage.

Page 19: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

19IFT313

Exemple 2

- M = (S,V,T,R,s,S,$) :• S = {s,p}• V = {A,B}• T = {a,b}• R = { (s, a, ε) (s, A), (s, b, ε) (s, B), (s, ε, ε) (p, ε), (p, a, A) (p, ε), (p, b, B) (p, ε)}

G = (V,A,R,S), tel que:

V = {S}

A = {a,b}

R = {S ® ε, S ® aSa, S ® bSb}

• Automate non-déterministe correspondant à la grammaire :

• L(G) = {w wR | w est dans A*}, c-à-d., un palindrome: chaîne concaténé avec son inverse

Page 20: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

20IFT313

Exemple 2 (Exécutions)

- M = (S,V,T,R,s,S,$) :• S = {s,p}• V = {A,B}• T = {a,b}• R = { (s, a, ε) -> (s, A), (s, b, ε) ->(s,B), (s, ε, ε) ->(p,ε), (p, a, A) ->(p,ε), (p, b, B) ->(p,ε)}

- L(M) = {w wR | w est dans T*}

Input: abba

(s, $, abba$)(s, $A, bba$)(s, $AB, ba$)(p, $AB, ba$)(p, $A, a$)(p, $,$)

Input: abab

Accepte. Il y a des exécutionsqui n’acceptent pas. Mais abba est dans le langage puisqueau moins une exécution accepte.

Rejette. Aucune autreexécution n’accepte.Donc abab n’est pas dans le langage.

(s, $, abab$)(s, $A, aab$)(s, $AB, ab$)(p, $AB, ab$)

Pas de transition !

Rappel : configuration: (état, pile, reste-de-l’entrée)

Page 21: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

21IFT313

Discussion

- M = (S,V,T,R,s,S,$) :• S = {s,p}• V = {A,B}• T = {a,b}• R = { (s, a, ε) -> (s, A),

(s, b, ε) ->(s, B),

(s, ε, ε) ->(p, ε),

(p, a, A) ->(p, ε),

(p, b, B) ->(p, ε)}

- L(M) = {w wR | w est dans T*}

Cet automate à pile est non-déterministe. Une question intéressante est « y-a-t-il un automate à pile déterministe équivalent? »

La réponse est «non». Donc le langage L1 = {w wR | w est dans {a,b}*}, est non-déterministe hors-contexte.

Par contre, le langage similaire L2 = {w c wR | w est dans {a,b}*} est déterministe hors-contexte.

Intuitivement, avec L2 on peut de manière déterministe vérifier le milieu de la chaîne. AvecL1, on ne peut pas.

Exercice: Donner une grammaire hors-contexte et un automate à pile déterministe pour L2.

Page 22: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

22IFT313

Au delà des langages hors-contexte

- Bien qu’un automate à pile peut avoir un nombre infini d’états (configura-tions), il existe des langages qui ne sont pas acceptés par un automate à pile, c-à-d., des langages qui ne sont pas hors-contextes.

- Exemple:

L(M) = {an bn cn | n ≥0}

n’est pas hors-contexte.

- Toutefois, il existe des modèles théoriques de programmes qui accepte un

tel langage. En particulier, les machines de Turing sont des généralisations

des automates à piles, pouvant accepter n’importe quel langage.

Page 23: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

23IFT313

Exercice

1. Étant donné l’alphabet {a,b}, donnez :

(a) Une grammaire générant le langage composé de mots ayant le même nombre de a et de b, peu importe l’ordre dans lequel ces deux sym-boles apparaissent dans le mot.

(b) Un automate à pile (non-déterministe) acceptant le même langage.

Page 24: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

IFT313 © Froduald Kabanza

24

Solution

a) Grammaire générant le langage composé de mots ayant le même nombre de a et de b

G = (V,A,R,S), tel que:

V = {S}

A = {a,b}

R = { S ε

S aSbS S bSaS }

s0

a, A/AAa, $/$A

b, B/BBb, $/$B

a, B/ε

b, A/ ε

a) Automate à pile correspondant

M = ({s0},{A,B},{a,b},R, s0,{s0},$) :

Page 25: IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313

© Froduald Kabanza

25IFT313

Résumé

- Un automate à pile est un modèle de programme simple pour l’analyse syntaxique.

- Les parsers LL et LR sont fondamentalement des automates à pile déterministes.

- On les obtient en imposant des restrictions sur les grammaires hors-contexte.

- En général ces restrictions sont acceptables pour les langages de programmation courants.

- Les quelques prochaines leçons sera sur les parsers LL.

- Nous verrons les parsers LR vers la fin.