lr-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ...

30
LR-анализ Александр Рубцов [email protected] 25 ноября 2016 г.

Upload: others

Post on 26-May-2020

78 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-анализ

Александр Рубцов

[email protected]

25 ноября 2016 г.

Page 2: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

aabb$

S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 3: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

.a a b b $

S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 4: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[ . , $ ]

.a a b b $

S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 5: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[ . , $ ]

[ . , a ]

.a a b b $

S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 6: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[ . , $ ]

[ . , a ]

.a a b b $

S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 7: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

.a a b b $S1 → ε

S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 8: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

a .a b b $S1 → ε

S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 9: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

[ . , b ]

a .a b b $S1 → ε

S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 10: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

[ . , b ]

[ . , a ]

a .a b b $S1 → ε

S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 11: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

[

.

. , b ]

a .a b b $S1 → ε S3 → ε

S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 12: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

[

.

. , b ]

[ . , b ]

a a .b b $S1 → ε S3 → ε

S4 → ε S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 13: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

[

.

. , b ]

a a .b b $S1 → ε S3 → ε S4 → ε

S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 14: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

[

.

., b ]

a a b .b $S1 → ε S3 → ε S4 → ε

S2 → S3aS4b S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 15: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

. , $ ]

a a b .b $S1 → ε S3 → ε S4 → ε S2 → S3aS4b

S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 16: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[ . , $ ]

[

.

., $ ]

a a b b .$S1 → ε S3 → ε S4 → ε S2 → S3aS4b

S → S1aS2b[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 17: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

a a b b $S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b

[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 18: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

a a b b $S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b

[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 19: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR-анализ

S

S1

ε

a S2

S3

ε

a S4

ε

b

b

[

.

, $ ]

[

.

, $ ]

[

.

, b ][ . , a ]

[ . , a ] [ . , b ]

a a b b $

S1 → ε S3 → ε S4 → ε S2 → S3aS4b S → S1aS2b

[ S [ S1[ε, a] (a) S2 [ S3[ε, a] (a) S4[ε, b] (b) , b] (b), $] , $]

Александр Рубцов LR-анализ

Page 20: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

Автомат Кнута

[S ′ → ·S , $] [S → ·SaSb, $]

[S → ·ε, $] [S → ·SaSb, a]

[S → ·ε, a]

[S ′ → S ·, $] [S → S · aSb, $]

[S → S · aSb, a]

[A→ α · Bβ, u] [B → ·γ, v ] v ∈ FIRST(βu)

ε

ε

S

ε

ε

S

ε

ε

S

ε

a

a

Александр Рубцов LR-анализ

Page 21: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

Детерминизация

[S ′ → ·S , $][S → ·SaSb, $][S → ·ε, $][S → ·SaSb, a][S → .ε, a]

[S ′ → S ·, $][S → S ·aSb, $][S → S ·aSb, a]

S a

Александр Рубцов LR-анализ

Page 22: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

Детерминизация

I0S → ·ε, $S → ·ε, a

S → ·SaSb, $S → ·SaSb, aS ′ → ·S , $

I1S → S · aSb, $S → S · aSb, aS ′ → S ·, $

I2S → ·, aS → ·, b

S → ·SaSb, aS → ·SaSb, bS → Sa · Sb, $S → Sa · Sb, a

I3S → S · aSb, aS → S · aSb, bS → SaS · b, $S → SaS · b, a

I4S → ·, aS → ·, b

S → ·SaSb, aS → ·SaSb, bS → Sa · Sb, aS → Sa · Sb, b

I5S → SaSb·, $S → SaSb·, a

I6S → S · aSb, aS → S · aSb, bS → SaS · b, aS → SaS · b, b

I7S → SaSb·, aS → SaSb·, b

S

a

S

b

a

S ba

Александр Рубцов LR-анализ

Page 23: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Александр Рубцов LR-анализ

Page 24: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Стэк Вход Действие РазборI0 abab$ R: S → ε

I0SI1 abab$ S: I2 2I0SI1aI2 bab$ R: S → ε 2

I0SI1aI2SI3 bab$ S: I5 22I0SI1aI2SI3bI5 ab$ R: S → SaSb 22

Александр Рубцов LR-анализ

Page 25: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Стэк Вход Действие РазборI0 abab$ R: S → ε

I0SI1 abab$ S: I2 2

I0SI1aI2 bab$ R: S → ε 2I0SI1aI2SI3 bab$ S: I5 22

I0SI1aI2SI3bI5 ab$ R: S → SaSb 22

Александр Рубцов LR-анализ

Page 26: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Стэк Вход Действие РазборI0 abab$ R: S → ε

I0SI1 abab$ S: I2 2I0SI1aI2 bab$ R: S → ε 2

I0SI1aI2SI3 bab$ S: I5 22I0SI1aI2SI3bI5 ab$ R: S → SaSb 22

Александр Рубцов LR-анализ

Page 27: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Стэк Вход Действие РазборI0 abab$ R: S → ε

I0SI1 abab$ S: I2 2I0SI1aI2 bab$ R: S → ε 2

I0SI1aI2SI3 bab$ S: I5 22

I0SI1aI2SI3bI5 ab$ R: S → SaSb 22

Александр Рубцов LR-анализ

Page 28: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Стэк Вход Действие РазборI0 abab$ R: S → ε

I0SI1 abab$ S: I2 2I0SI1aI2 bab$ R: S → ε 2

I0SI1aI2SI3 bab$ S: I5 22I0SI1aI2SI3bI5 ab$ R: S → SaSb 22

Александр Рубцов LR-анализ

Page 29: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Стэк Вход Действие РазборI0SI1aI2SI3bI5 ab$ R: S → SaSb 22

I0SI1 ab$ S: I2 221I0SI1aI2 b$ R: S → 221

I0SI1aI2SI3 b$ S: I2 2212I0SI1aI2SI3bI5 $ R: S → SaSb 22121

Александр Рубцов LR-анализ

Page 30: LR-анализ · lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ. lr-грамматикиАвтомат Кнутаlr(1)-анализ lr-анализ

LR-грамматики Автомат Кнута LR(1)-анализ

LR(1)-анализатор

State a b $ SI0 R: S → ε R: S → ε I1I1 S: I2 R: S’ → SI2 R: S → ε R: S → ε I3I3 S: I4 S: I5I4 R: S → ε R: S → ε I6I5 R: S → SaSb R: S → SaSbI6 S: I4 S: I7I7 R: S → SaSb R: S → SaSb

Стэк Вход Действие РазборI0SI1 ab$ S: I2 221

I0SI1aI2 b$ R: S → 221I0SI1aI2SI3 b$ S: I2 2212

I0SI1aI2SI3bI5 $ R: S → SaSb 22121I0SI1 $ Accept 22121

Александр Рубцов LR-анализ