Download - Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison
Applications des langages hors-contextes
Les analyseurs syntactiques ascendantsGNU Yacc et Bison
Analyseur ascendant
Il s’agit d’un automate à pile déterministe avec deux types de transitions:
– Déplacement (Shift): Action de placer le symbole d’entrée courant sur le dessus de la pile et d’avancer la tête de lecture au prochain symbole d’entrée.
– Réduction: S’il existe une règle Tw et que w est sur le dessus de la pile alors une réduction consiste à remplacer w par T.
Analyseur ascendant• Le comportement d'un parseur ascendant est indiqué par
deux tables:
• La table ACTION indique si un déplacement ou une réduction doit avoir lieu étant donné l'état courant et le prochain terminal
• La table GOTO indique quel état on doit placer sur le dessus de la pile après qu'une réduction ait eu lieu.
Exemple
• On a la grammaire:
1. E → E + T2. E → T3. T → T * F4. T → F5. F → ( E )6. F → id
• Les tables ACTION et GOTO sont habituellement construite à l'aide d'un programme telle que YACC ou GNU bison
Les tables ACTION et GOTO
Analyseurs ascendants (suite)
Pile Entrée Action
0 id + id * id $ Shift 5
0 id 5 + id * id $ Reduce 6 (GOTO[0,F])
0 F 3 + id * id $ Reduce 4 (GOTO[0,T])
0 T 2 + id * id $ Reduce 2 (GOTO[0,E])
0 E 1 + id * id $ Shift 6
0 E 1 + 6 id * id $ Shift 5
0 E 1 + 6 id 5 * id $ Reduce 6 (GOTO[6,F])
0 E 1 + 6 F 3 * id $ Reduce 4 (GOTO[6,T])
0 E 1 + 6 T 9 * id $ Shift 7
0 E 1 + 6 T 9 * 7 id $ Shift 5
0 E 1 + 6 T 9 * 7 id 5 $ Reduce 6 (GOTO[7,F])
0 E 1 + 6 T 9 * 7 F 10 $ Reduce 3 (GOTO[6,T])
0 E 1 + 6 T 9 $ Reduce 1 (GOTO[0,E])
0 E 1 $ Accept
1) E → E + T2) E → T3) T → T * F4) T → F5) F → ( E )6) F → id
Analyseurs ascendants (suite)
Le non déterminisme de l’automate à pile peut provenir de deux situations:
• Conflit shift-reduce
• Conflit reduce-reduce
Conflits Shift-Reduce
S → 0 S 0 | 0
• Dans la situation où 0 est au dessus de la pile et que le prochain symbole d’entrée est 0, on a le choix entre faire une réduction (règle S → 0) où encore mettre 0 sur la pile (shift)
• Bison (ou Yacc) choisit toujours le Shift dans ce cas.
Conflits Reduce-Reduce
1. S → 0 S 0 2. S → T3. T → S 0 4. T → 1
• Si la pile contient 0 S 0 alors il y a deux réductions possibles (règles 1 et 3)
• Yacc choisit toujours la première des règles dans ce cas.
Comprendre les tables: les items (0) S → T$ (1) T → 0T0 (2) T → 1
Items: S → _T$ T → _0T0 T → _1 S → T_$ T → 0_T0 T → 1_ S → T$_ T → 0T_0
T → 0T0_Items complets:
S → T$_T → 0T0_ T → 1_
T
S→T_$
Signification des items
0 T 0
0 T 0
S
S→_T$
$
S→T$_
T
T→0T_0
T
T→0T_0
0
T→0T0_
1
T→1_
0
T→0T0_
0
T→0_T0
0
T→0_T0
• Un item de la forme A→α_β indique que l'on est en train de traiter la règle A→αβ alors que α est sur les dessus de la pile
• Un item complet de la forme A→γ_ indique que γ est sur le dessus de la pile et qu'on peut le remplacer par A (réduction)
T
S→T_$
Signification des items (suite)
0 T 0
0 T 0
S
S→_T$
$
S→T$_
T
T→0T_0
T
T→0T_0
0
T→0T0_
1
T→1_
0
T→0T0_
0
T→0_T0
0
T→0_T0
1, T→1_
0, T→0_T0
0, T→0_T0
S, S→_T$
Accepter
S, S→_T$
$, S→T$_
T, S→T_$
S, S→_T$
T, S→T_$
S, S→_T$
0, T→0T0_
T, T→0T_0
0, T→0_T0
S, S→_T$
T, T→0T_0
0, T→0_T0
0, T→0_T0
S, S→_T$
0, T→0T0_
T, T→0T_0
0, T→0_T0
0, T→0_T0
S, S→_T$
T, T→0T_0
0, T→0_T0
S, S→_T$
Shifts (3 fois) Reduce Shift Reduce
Shift Reduce Shift Reduce
Analyse du mot 00100$
Automate fini déterministe(Enfin presque)
0
S→_T$
1
S→T_$
<accept>
S→T$_
4
T→0T_0
2
T→0_T0
5
T→0T0_
3
T→1_
0
0
T 0
T
$
11
0) S → T$1) T → 0T02) T → 1
• Cet automate sert à définir les tables ACTION et GOTO
• Chaque état correspond à un item
• Les mots conduisant à un item sont ceux représentant le contenu possible de la pile.
• L’état poubelle n’est pas illustré.
Construction des tables à partir de l'automate
ACTION GOTO
0 1 $ T
0 S2 S3 1
1accepte
r
2 S2 S3 4
3 R2 R2
4 S5
5 R1 R1
Autre exemple
• Ajoutons 3 règles à la grammaire précédente:
(0) S → T$ (1) T → 0T0 (2) T → 1 (3) T → 0V (4) V → 2V (5) V →2
Automate fini non-déterministe
0
S→_T$
1
S→T_$
<accept>
S→T$_
4
T→0T_0
2
T→0_T0
5
T→0T0_
3
T→1_
0
0
T 0
T
$
11
6
T→0_V
8
V→2_V
7
V→2_
9
V→2V_
2
2
2
V
0
2
10
T→0V_
V
Automate fini déterministe
0
S→_T$
1
S→T_$
<accept>
S→T$_
4
T→0T_02
T→0_T0
5
T→0T0_
3
T→1_
0
0
T
$
11
2,6
T→0_T0T→0_V 7,8
V→2_V→2_V
9
V→2V_
2
2V
0
0
T
10
T→0V_
V
Après la transformation, chaque état correspond à un ensemble d'items.