17
Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

Embed Size (px)

Citation preview

Page 1: 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

Page 2: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU 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.

Page 3: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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.

Page 4: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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

Page 5: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

Les tables ACTION et GOTO

Page 6: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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

Page 7: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

Analyseurs ascendants (suite)

Le non déterminisme de l’automate à pile peut provenir de deux situations:

• Conflit shift-reduce

• Conflit reduce-reduce

Page 8: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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.

Page 9: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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.

Page 10: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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_

Page 11: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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)

Page 12: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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$

Page 13: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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é.

Page 14: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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

Page 15: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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

Page 16: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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

Page 17: Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison

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.