Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von...

75
Fabian Berlin Syntaktische Analyse – Bottom- up Im Rahmen des Seminars „Übersetzung von künstlichen Sprachen“

Transcript of Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von...

Page 1: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

Fabian Berlin

Syntaktische Analyse – Bottom-up

Im Rahmen des Seminars „Übersetzung von künstlichen Sprachen“

Page 2: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

2

Gliederung

1. Grundlagen der Bottom-Up-Syntaxanalyse

2. Operator-Precedence-Syntaxanalyse

3. LR-Syntaxanalyse 3.1 LR-Syntaxanalysealgorithmus

3.2 LR(0)

3.3 SLR(1)

3.4 LR(1)

3.5 LALR(1)

4. Zusammenfassung

Page 3: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

3

Einführung in die Bottom-Up-Syntaxanalyse

Grammatik G1:

Regel 1: S → aABe

Regel 2: A → Abc | b

Regel 3: B → d

a b b c d e

S

a A B e

a A d e

a A b c d e

Regel 2: A → b

Regel 2: A → Abc

Regel 3: B → d

Regel 1: S → aABe

Ziel:

Anwendung von Reduktionsschritten, um von der Eingabe auf das Startsymbol S zu reduzieren

Page 4: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

4

Einführung in die Bottom-Up-Syntaxanalyse

S

A

B

A

a b b c d e

Anwendung einer umgekehrten Rechtsableitung

Problem: Bestimmung von Handles (rechte Seiten von Regeln, die reduziert werden können, um vorhergehenden Schritt der Rechtsableitung zu erhalten)

Idee: Nutzung eines Stacks

A → b

A → Abc

B→ d

S→ aABe

Page 5: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

5

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 6: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

6

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$

3

4

5

6

7

8

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Shift: Inputsymbol auf den Stack schieben (bis Handle erscheint)

Page 7: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

7

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$

4

5

6

7

8

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Reduce: reduzieren des Handle

Page 8: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

8

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$

5

6

7

8

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 9: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

9

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$

6

7

8

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 10: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

10

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$

7

8

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 11: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

11

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$

8

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 12: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

12

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$

9

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 13: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

13

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$

10

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 14: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

14

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$ Shift *

10 $ E + T * id$

11

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 15: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

15

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$ Shift *

10 $ E + T * id$ Shift id

11 $ E + T * id $

12

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 16: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

16

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$ Shift *

10 $ E + T * id$ Shift id

11 $ E + T * id $ Reduce 9

12 $ E + T * F $

13

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 17: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

17

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$ Shift *

10 $ E + T * id$ Shift id

11 $ E + T * id $ Reduce 9

12 $ E + T * F $ Reduce 5

13 $ E + T $

14

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 18: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

18

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$ Shift *

10 $ E + T * id$ Shift id

11 $ E + T * id $ Reduce 9

12 $ E + T * F $ Reduce 5

13 $ E + T $ Reduce 2

14 $ E $

15

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 19: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

19

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$ Shift *

10 $ E + T * id$ Shift id

11 $ E + T * id $ Reduce 9

12 $ E + T * F $ Reduce 5

13 $ E + T $ Reduce 2

14 $ E $ Reduce 1

15 $ S $

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Page 20: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

20

Syntaxanalyse mit einem StackNr. Stack: Input: Aktion:

1 $ id + num * id$ Shift id

2 $ id + num * id$ Reduce 9

3 $ F + num * id$ Reduce 7

4 $ T + num * id$ Reduce 4

5 $ E + num * id$ Shift +

6 $ E + num * id$ Shift num

7 $ E + num * id$ Reduce 8

8 $ E + F * id$ Reduce 7

9 $ E + T * id$ Shift *

10 $ E + T * id$ Shift id

11 $ E + T * id $ Reduce 9

12 $ E + T * F $ Reduce 5

13 $ E + T $ Reduce 2

14 $ E $ Reduce 1

15 $ S $ Accept

Grammatik G2:

1 S E

2 E E + T

3 E E –T

4 E T

5 T T * F

6 T T / F

7 T F

8 F num

9 F id

Accept: Eingabe entsprach der Grammatik erfolgreiches Ende

Page 21: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

21

Operator-Precedence-Syntaxanalyse

Definition von Relationen zwischen dem obersten Stackelement und dem ersten Eingabesymbol (begrenzt auf Terminalsymbole)

Vorgehen:

< oder =: Shift

>: Reduce

Handles werden erkannt: <: linke Markierung des Handle

>: rechte Markierung des Handle

Relation: Semantik:

a <• b a hat niedrigere Priorität als b

a •> b a hat höhere Priorität als b

a = b a und b haben gleiche Priorität

$ <• id •> + <• id •> * <• id•> $

Erstes Handle

Page 22: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

22

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2

3

4

5

6

7

8

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 23: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

23

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3

4

5

6

7

8

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 24: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

24

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4

5

6

7

8

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 25: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

25

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5

6

7

8

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 26: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

26

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5 $E<•+<•id •> *id$ Red: E id

6

7

8

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 27: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

27

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5 $E<•+<•id •> *id$ Red: E id

6 $ E<•+E <• *id$ Shift: <•*

7

8

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 28: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

28

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5 $E<•+<•id •> *id$ Red: E id

6 $ E<•+E <• *id$ Shift: <•*

7 $ E<•+<•* <• id$ Shift: <•id

8

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 29: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

29

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5 $E<•+<•id •> *id$ Red: E id

6 $ E<•+E <• *id$ Shift: <•*

7 $ E<•+<•* <• id$ Shift: <•id

8 $E<•+<•*<•id •> $ Red: E id

9

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 30: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

30

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5 $E<•+<•id •> *id$ Red: E id

6 $ E<•+E <• *id$ Shift: <•*

7 $ E<•+<•* <• id$ Shift: <•id

8 $E<•+<•*<•id •> $ Red: E id

9 $E<•+<•*E •> $ Red: E E*E

10

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 31: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

31

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5 $E<•+<•id •> *id$ Red: E id

6 $ E<•+E <• *id$ Shift: <•*

7 $ E<•+<•* <• id$ Shift: <•id

8 $E<•+<•*<•id •> $ Red: E id

9 $E<•+<•*E •> $ Red: E E*E

10 $E<•+E •> $ Red: E E+E

11

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 32: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

32

Ablauf OP-Parser

Nr Stack: R. Input: Aktion:

1 $ <• id+id*id$ Shift: <•id

2 $<•id •> +id*id$ Red: E id

3 $E <• +id*id$ Shift: <•+

4 $E<•+ <• id*id$ Shift: <•id

5 $E<•+<•id •> *id$ Red: E id

6 $ E<•+E <• *id$ Shift: <•*

7 $ E<•+<•* <• id$ Shift: <•id

8 $E<•+<•*<•id •> $ Red: E id

9 $E<•+<•*E •> $ Red: E E*E

10 $E<•+E •> $ Red: E E+E

11 $E $ Accept

+ * ( ) id $

+ •> <• <• •> <• •>

* •> •> <• •> <• •>

( <• <• <• = <•

) •> •> •> •>

id •> •> •> •>

$ <• <• <• <•

Grammatik G3:

Regel 1: E E + E

Regel 2: E E * E

Regel 3: E ( E )

Regel 4: E id

Input

Stac

k

Page 33: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

33

Operator-Grammatik

Grammatik muss folgende Bedingungen erfüllen, damit sie mit OP-Parser behandelt werden kann:1. Keine zwei aufeinander folgenden Nichtterminale auf der rechten

Seite einer Produktion.

2. Keine Produktion mit gleicher rechter Seite.

3. Keine ε-Produktionen.

sehr schwaches Verfahren!

Page 34: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

34

LR-Syntaxanalyse

LR(k)LR(1)LALR(1)

SLR(1)

LR(0)LL(0)

LL(1)

LL(k)

Alle eindeutigen Grammatiken

LR(k)-Syntaxanalyse:L: left-to-right-parse

R: rightmost derivation: Rechtsableitung

k: k-token lookahead: Anzahl im Voraus betrachteter Inputsymbole

Quelle: Appel, Palsberg (2002).

Page 35: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

35

Modell eines LR-Parsers

Action[sm,ai] = shift s |

reduce A β |

accept |

error.

a1 … ai … an $

Sm

Xm

Sm-1

Xm-1

S0

LR-Syntaxanalyse-Programm

Input

Syntaxanalyse-tabelle

Stack

Terminalsymbole

Output

Syntaxbaum

Zu

-stand

Action

(Terminale)

X1… Xn

Goto

(Nichtterminale)

X1… Xn

0

1

Goto[s‘, A]

Page 36: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

36

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2

3

4

5

6

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 37: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

37

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 id 3 + id $ Reduce 3

3

4

5

6

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 38: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

38

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 T + id $ Reduce 3 2

3

4

5

6

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 39: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

39

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 T 2 + id $ Reduce 3 2

3

4

5

6

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 40: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

40

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 id 3 + id $ Reduce 3 2

3 $ 0 T 2 + id $ Reduce 2 1

4

5

6

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 41: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

41

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 id 3 + id $ Reduce 3 2

3 $ 0 T 2 + id $ Reduce 2 1

4 $ 0 E 1 + id $ Shift 4

5

6

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 42: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

42

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 id 3 + id $ Reduce 3 2

3 $ 0 T 2 + id $ Reduce 2 1

4 $ 0 E 1 + id $ Shift 4

5 $ 0 E 1 + 4 id $ Shift 3

6

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 43: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

43

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 id 3 + id $ Reduce 3 2

3 $ 0 T 2 + id $ Reduce 2 1

4 $ 0 E 1 + id $ Shift 4

5 $ 0 E 1 + 4 id $ Shift 3

6 $ 0 E 1 + 4 id 3 $ Reduce 3 5

7

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 44: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

44

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 id 3 + id $ Reduce 3 2

3 $ 0 T 2 + id $ Reduce 2 1

4 $ 0 E 1 + id $ Shift 4

5 $ 0 E 1 + 4 id $ Shift 3

6 $ 0 E 1 + 4 id 3 $ Reduce 3 5

7 $ 0 E 1 + 4 T 5 $ Reduce 1 1

8

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 45: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

45

Ablauf LR-Parser

Nr Stack Input Action Goto

1 $ 0 id + id $ Shift 3

2 $ 0 id 3 + id $ Reduce 3 2

3 $ 0 T 2 + id $ Reduce 2 1

4 $ 0 E 1 + id $ Shift 4

5 $ 0 E 1 + 4 id $ Shift 3

6 $ 0 E 1 + 4 id 3 $ Reduce 3 5

7 $ 0 E 1 + 4 T 5 $ Reduce 1 1

8 $ 0 E 1 $ Accept

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Page 46: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

46

LR-Syntaxanalysetabelle-Konstruktion

Allgemeines Vorgehen:Erstellen von:

1. „Dummy-Produktion“: S‘ S (S ist altes Startsymbol).

2. Endlichem Automat.

3. Syntaxanalysetabelle.

Page 47: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

47

Erstellen eines Zustandsübergangsgraphen

Grundbegriffe:

Items: Produktionen mit Markierungspunkt auf rechter Seite; zeigt an wie weit man im Parseprozess vorangeschritten ist.

A •XYZ

A X•YZ

A XY•Z

A XYZ•

Closure-Operation: fügt weitere Items zu einer Menge von Items hinzu.

Goto-Operation: Definiert Zustandsübergänge zwischen Mengen von Items/Zuständen des Automaten.

Page 48: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

48

Erstellen eines Zustandsübergangsgraphen

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Closure-Operation anwenden!

Page 49: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

49

Erstellen einer LR(0)-Syntaxanalysetabelle

Punkt am rechten Ende eines ItemsFalls Dummy-Item: Accept

Sonst Reduce

I J, mit X Terminalsymbol: Shift

I J, mit X Nichtterminalsymbol: Goto

Page 50: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

50

Erstellen der LR(0)-Syntaxanalysetabelle

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Action Goto

Zust id + $ E T

0

1

2

3

4

5

Page 51: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

51

Erstellen der LR(0)-Syntaxanalysetabelle

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Action Goto

Zust id + $ E T

0 s3 1 2

1

2

3

4

5

Page 52: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

52

Erstellen der LR(0)-Syntaxanalysetabelle

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2

3

4

5

Page 53: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

53

Erstellen der LR(0)-Syntaxanalysetabelle

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3

4

5

Page 54: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

54

Erstellen der LR(0)-Syntaxanalysetabelle

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4

5

Page 55: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

55

Erstellen der LR(0)-Syntaxanalysetabelle

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5

Page 56: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

56

Erstellen der LR(0)-Syntaxanalysetabelle

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

S •EE •E+TE •TT •id

S E•E E•+T

E T• T id•

S E+ •TT •id

E E+T•

E +

T id id T

I0

I2

I1

I3

I4

I5

Action Goto

Zust id + $ E T

0 s3 1 2

1 s4 acc

2 r2 r2 r2

3 r3 r3 r3

4 s3 5

5 r1 r1 r1

Page 57: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

57

LR(0)-Syntaxanalyse

Grammatik G4:

Regel 1: E E + T

Regel 2: E T

Regel 3: T id

Grammatik G5:

Regel 1: E T + E

Regel 2: E T

Regel 3: T id

Page 58: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

58

LR(0)-Syntaxanalyse

Grammatik G5:

Regel 1: E T + E

Regel 2: E T

Regel 3: T id

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 r2 s3, r2 r2

3 s4 5 2

4 r3 r3 r3

5 r1 r1 r1

S •EE •T+EE •TT •id

E

T

id

I0

S E• I1

E T•+EI2E T•

T id• I4

E T+ •EE •T+EE •TT •id

I3E T+E• I5

E

T+

Page 59: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

59

LR(0)-Syntaxanalyse

Zwei mögliche Konflikte bei LR-Analyse:Shift-reduce-Konflikt

Reduce-reduce-Konflikt

Page 60: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

60

SLR(1)-Syntaxanalyse

SLR(1)-Syntaxanalyse ist Erweiterung von LR(0):Anzahl von Reduce-Einträgen in Action-Tabelle kann verringert werden

Reduce-Aktionen werden nicht mehr für jedes Terminalsymbol eines Zustands eingetragen

Eintrag nur bei Terminalsymbolen, die sich in FOLLOW-Menge des Nichtterminals der Regel befinden

Informale FOLLOW-Definition:X ist ein Nichtterminal

FOLLOW(X) ist die Menge aller Terminale, die in einem Wort direkt rechts neben X stehen können

Page 61: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

61

SLR(1)-SyntaxanalysetabelleFOLLOW(S): {$}

FOLLOW(E): {$}

FOLLOW(T): {+,$}

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 r2 s3, r2 r2

3 s4 5 2

4 r3 r3 r3

5 r1 r1 r1

Grammatik G5:

Regel 1: E T + E

Regel 2: E T

Regel 3: T id

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 s3 r2

3 s4 5 2

4 r3 r3 r3

5 r1 r1 r1

LR(0)-Syntaxanalysetabelle SLR(1)-Syntaxanalysetabelle

Page 62: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

62

SLR(1)-SyntaxanalysetabelleFOLLOW(S): {$}

FOLLOW(E): {$}

FOLLOW(T): {+,$}

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 r2 s3, r2 r2

3 s4 5 2

4 r3 r3 r3

5 r1 r1 r1

Grammatik G5:

Regel 1: E T + E

Regel 2: E T

Regel 3: T id

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 s3 r2

3 s4 5 2

4 r3 r3

5 r1 r1 r1

LR(0)-Syntaxanalysetabelle SLR(1)-Syntaxanalysetabelle

Page 63: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

63

SLR(1)-SyntaxanalysetabelleFOLLOW(S): {$}

FOLLOW(E): {$}

FOLLOW(T): {+,$}

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 r2 s3, r2 r2

3 s4 5 2

4 r3 r3 r3

5 r1 r1 r1

Grammatik G5:

Regel 1: E T + E

Regel 2: E T

Regel 3: T id

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 s3 r2

3 s4 5 2

4 r3 r3

5 r1

LR(0)-Syntaxanalysetabelle SLR(1)-Syntaxanalysetabelle

Page 64: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

64

SLR(1)-SyntaxanalysetabelleFOLLOW(S): {$}

FOLLOW(E): {$}

FOLLOW(T): {+,$}

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 r2 s3, r2 r2

3 s4 5 2

4 r3 r3 r3

5 r1 r1 r1

Grammatik G5:

Regel 1: E T + E

Regel 2: E T

Regel 3: T id

Action Goto

Zust id + $ E T

0 s4 1 2

1 acc

2 s3 r2

3 s4 5 2

4 r3 r3

5 r1

LR(0)-Syntaxanalysetabelle SLR(1)-Syntaxanalysetabelle

Page 65: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

65

LR(1)-Syntaxanalyse

Mit SLR(1) erstellte Syntaxanalysetabelle für Grammatik G6:

FOLLOW(S‘): {$}

FOLLOW(S): {$}

FOLLOW(E): {+,=,$}

Action Goto

Zust = + id $ S E

0 s3 1 2

1 acc

2 s4 s6

3 r4 r4 r2/r4

4 s8 5

5 s6 r1

6 s7

7 r3 r3 r3

8 r4 r4 r4

Grammatik G‘6:

Regel 0: S‘ S

Regel 1: S E = E

Regel 2: S id

Regel 3: E E + id

Regel 4: E id

Page 66: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

66

LR(1)-Syntaxanalyse

id

S

S’

$

S’

S

E = E

id id

S’

S

+

idid

E

$ $

Anwendung von Regel 2

Anwendung von Regel 4

Anwendung von Regel 4

Grammatik G‘6:

Regel 0: S‘ S

Regel 1: S E = E

Regel 2: S id

Regel 3: E E + id

Regel 4: E id

Action Goto

Zust = + id $ S E

0 s3 1 2

1 acc

2 s4 s6

3 r4 r4 r2/r4

4 s8 5

5 s6 r1

6 s7

7 r3 r3 r3

8 r4 r4 r4

Page 67: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

67

LR(1)-Syntaxanalyse

SLR(1)-Syntaxanalyse Nutzung von FOLLOW-Mengen

Globale Betrachtung, Zustand wird nicht berücksichtigt

LR(1)-SyntaxanalyseNutzung von LOOKAHEAD-Mengen

Für jeden Zustand wird Information mitverwaltet, welche Terminale auf ein Nichtterminal nach Reduktion einer bestimmten Reduktionsregel im Zustandsautomaten folgen können

Page 68: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

68

LR(1)-Syntaxanalyse

Änderungen im Vergleich zu SLR(1):Verwendung von LR(1)- anstelle von LR(0)-Items.

Definition von closure- und goto-Operation für Behandlung der LOOKAHEAD-Mengen abgeändert. Anfangszustand ist [S‘ S, $].

Action-Tabelle nutzt LOOKAHEAD-Mengen und nicht FOLLOW-Mengen.

Page 69: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

69

LR(1)-Syntaxanalyse

S‘ •S {$} S •E=E {$}S •id {$}E •E+id {+,=}

I0

E •id {+,=}

S‘ S• {$}

S

I1

S id• {$}

id

E id• {+,=}

I3

S E•=E {$}

E

E E•+id {+,=}

I2

I4

I6

+

=

Grammatik G‘6:

0: S‘ S

1: S E = E

2: S id

3: E E + id

4: E id

Kern LOOKAHEAD-Menge

Page 70: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

70

LR(1)-Syntaxanalyse

Mit LR(1) erstellte Syntaxanalysetabelle für Grammatik G6:

Action Goto

Zust = + id $ S E

0 s3 1 2

1 acc

2 s4 s6

3 r4 r4 r2

4 s8 5

5 s9 r1

6 s7

7 r3 r3

8 r4 r4

9 s10

10 r3 r3

Grammatik G‘6:

Regel 0: S‘ S

Regel 1: S E = E

Regel 2: S id

Regel 3: E E + id

Regel 4: E id

Page 71: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

71

LR(1)-Syntaxanalyse

LR(1) mächtiges Verfahren

Anzahl Zustände: Typische Programmiersprachen bei LR(0)/SLR(1) mehrere 100

Typische Programmiersprache bei LR(1) werden mehrere 1000

Motivation für LALR(1):Weniger Zustände als LR(1)

Trotzdem mächtig genug für typische Programmiersprachen

Vorgehen bei LALR(1):Zustände eines LR(1)-Zustandsübergangsgraphen mit gleichen Kernen zusammenfassen

Page 72: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

72

LALR(1)-Syntaxanalyse

S’→ .S {$}S → .E=E {$}S → .id {$}E → .E+id {+,=}E → .id {+,=}

S

E

S’→ S. {$}

I1

S → id. {$}E → id. {+,=}

S → E.=E {$}E → E.+id {+,=}

S → E=.E {$}E → .E+id {+,$}E → .id {+,$}

=

I0

I3 I2 I4

E → id. {+,$}

I8

id

E → E+.id {+,=}

I6

+

E → E+id. {+,=}id

I7

S → E=E. {$}E → E.+id {+,$}

I5

E → E+.id {+,$}

I9

E → E+id. {+,$}

I10

E

+

id

Gleiche Kerne

Page 73: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

73

LALR(1)-Syntaxanalyse

Mit LALR(1) erstellte Syntaxanalysetabelle für Grammatik G6:

Action Goto

Zust = + id $ S E

0 s3 1 2

1 acc

2 s4 s69

3 r4 r4 r2

4 s8 5

5 s69 r1

69 s710

710 r3 r3 r3

8 r4 r4

Grammatik G‘6:

Regel 0: S‘ S

Regel 1: S E = E

Regel 2: S id

Regel 3: E E + id

Regel 4: E id

Page 74: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

74

Zusammenfassung

Operator-Precedence-Syntaxanalyse Einfach umzusetzendes Verfahren

Geringe Mächtigkeit

LR-Parser Mächtigste effiziente Parser

LR(0), SLR(1), LALR(1), LR(1)

Gleicher Ablaufalgorithmus, Unterschied Syntaxanalysetabelle

Immer Konstruktion eines Zustandsautomaten, aus dem Syntaxanalysetabelle abgeleitet werden kann

Meist wird LALR(1) eingesetzt

Derzeitige Algorithmen der Syntaxanalyse ausreichend für gängige Programmiersprachen

Page 75: Fabian Berlin Syntaktische Analyse – Bottom-up Im Rahmen des Seminars Übersetzung von künstlichen Sprachen.

75

Fragen, Kommentare, Diskussion