3-Syntax Analysis

135
Syntax Analysis د.

Transcript of 3-Syntax Analysis

Syntax Analysis

�� ���� .د

ا������ ا���ا �ي : ا�������ت ���. د ���� 2

أه �� ا���ا ا������

��� ا��دًا ��� ��� ���Context-free Grammar ام����� BNF

��� د��� ��� ��ور�ً� ����� ا���� � ا���ا �#�"� ا!� �ام ا *)�� -2�3�4، �' ا ���1 *( ا )�0ت و.-�اع *)�دة *( ا %)� ا ���'، %�ء �

�ي ���: ا �9آ� *( 7�� ا ��(Parser) 6%ا ���4� ';*�" *( ا.�37ء ا�����ا ا

أ�7ى �� : A�B@�?� إ��@� ��?4B :�� �� ���� � ا ����� ا��4� �3Bر ا ���ت �;��- �;*�" إ��� اC*��-��ت ا��@� D"�B ،�?B��-��*وز��دة إ

��B ;��- 3�4 ��@� ،�� �ة ��: *��A@�ت ا F4% ا.!"� *( ا��; �� ا���� � ا���ا ا��@�دًا ��: ا��4 ا F4% ا

ا������ ا���ا �ي : ا�������ت ���. د ���� 3

ا������ ا���م � ��� ا���ا ا������

�: ا ـ ���Parser دات�H@ (Scanner) ا @�Hدات *( *)�� ا �@; � ) !K!� ا @�Hدات( ��)�� *( أن ا @�Hدات وا� ��� ا �اردة ���

���� � ا���ا ا��"�رًا *( ا �� و���� ��� ر� ����� ��� ���� �� ����� ���� ��� � �( ا��)�) أو �&%$� ا#��ء وا��

Lexical AnalysisSource Program

Syntax Analysis

Tokens

Symbol Table

Parse Tree

ا������ ا���ا �ي : ا�������ت ���. د ���� 4

ا���ف �� ا�� وا���آ� ��� ��� �� ���ه� ��� ا���ا�� ا������ و��ً

�� ا���ء

ء ���� ا�!-�",� ا��+ ���*( ا)'�ا&� ت$ل �!"�� ا�!�� �� ا:�/�ر ا�!��'�

ء �ول ا����ز���� �� ء ���ة ا������ا�� ... �

�� �� �+ �!"�� ا��3�4 ا���2+ و����1 ��������1 ��6 �5/� ت 1ا�-�ج

ا������ ا���ا �ي : ا�������ت ���. د ���� 5

Compile-time Error Handling

ء/2 �41د �= ت ا�>��*� أ�"�ب ا��5 � �9 ا81>�6 هAB ا�5!"�� �@ �( م ��!� و�/�ر ا�!��'�

ء/:�Bا، *F ا��-/�B�� E ا�>�ا � 8�"�ب ا��5 D+ �9 هAB ا8�Lexical

آ�� ��� �� �� � آ�

�Syntacticآ�� ��� �� �� �� �

�Semantic� �ً�� رة �� � ا����م ا��)' وا%$# ام (! م ���)� (

�Logical� ��+$�, �0�1ت .-

ا������ ا���ا �ي : ا�������ت ���. د ���� 6

Compile-time Error Handling ء �+ ��I"� ا��4"� ا���ا��ي/��1آJ5� K� ��اI ا��5 � �9 ا8

ء إ�6/ ��F ا��5 � �9 ا8�: !M���1 @N أ ا���� ��� ����(Panic Mode)ا� (Phrase Mode).-�,+ ا���� و�* و�( ا)'�&�ار � ��%$ �# "!�ر� �

(Error Recovery)و.��, '1-1( �# ا0/� ء إه �ل ,�1� ا�$��7 و�� �6 أآ- ! د , �3 ,3 ا����ء �

5دة � �&( �# �23 ا���� ��� ��/ +6 �-�: ار.� ط ا��&+ (�م .��, ر' ا��5; ا�����,(!<5�� (

.?*,< ا0/� ء�� ;�<, ��?<�= �0�01 و��

A,Automatic Programming+7م ا�ـ �

ا������ ا���ا �ي : ا�������ت ���. د ���� 7

Compile-time Error Handling ل @� ر ا���� و.�&,C ر' 6+ ا���� وإ"! ره?� D*. :�D:

Identifier X Undefined� ول أول �$()' أر��م ��%�CD ,6 ,�$7ى ا�#�� ��?��' ا��� �ت ا� �$# ,� �� ر%�CD ا�#�� �

�Undefind�Identifier�Missing� ....

� �0Eت ا���� �� )<$7ي !�F ا����H ول �� ��� CD�%ر F�! 7ي$>( I��H ول �

ا��ول ا�ول�� � ُ���ر إ���ت ا����دة �� ا��ول ا���� ��$)�'!ه� $%�رة $ �#"!ات إ ا�

: !� 1?7ل ��� �)ا�8�91ت( ا!2�6 �5��4+3 ا�12عء�.-, +�*( ��ء �#"! إ ا��ول ا��B�(C+ ;1�D ا!2�6 �� ا��ول ا�ول +5%ً� ���ن ?�وث ا=>. و�1; *) �� ;1�Eول ا+!آ���ا ات إ!"#� ا� 6�G�2 H�" �$ D��ول ا��6 �� ا!2�4ت ا�5������ وا�I*�G)� ا���ن : �� ���X H��5� 1�ن�� ��1ا��ة �� ا��ول Undefined و Identifier و+��ن ا�

ا����

ا������ ا���ا �ي : ا�������ت ���. د ���� 8

Context-free Grammar ??

��� ������� �%ا $�# " �!�ج � � ���ن '�ا�� +��دات ا��(�، '�ا�� �& #$�'��� آ��.!� ا�-

���� ا"��د ��� ����ً� و��1 ا���0 ا� � أ����ً� د'$�� # ا�.4� ا���ق +!�1 ا���دات ً�آ� ��� ا���رًا +.�� ا6� أو��+��

�� �.�ء ا�81 و��� أن ��: �� ���$ � $�أ+� ا��. � ا���ا�� ا�-�ي ��� �.� +�ا;�� !)�Nested Structuresد�� أو (��

أ��اس�

� 2N��@ �ا��ت و-?���ت ا

ا�%آ�اA@���%ا ���ن ا�.!� ا�-�$# أآ?� '�رة ��� ��� = ا��.�

ا������ ا���ا �ي : ا�������ت ���. د ���� 9

��ت ا������� ����� ا���� ا���� � ؟؟ �� �ه� ��

Context-free Grammar ??

� G. :Regular Expressionآ,� DFA

1 2a

a b

b � ���� ����� �

� �������� ������ ���

���� ���1 ��� ����� ) � !"a#$� (

���� ���2 ��� ����� ) � !"aab(

a S b | ε → S

ا������ ا���ا �ي : ا�������ت ���. د ���� 10

� أ"� $Context-free grammar ا)�'&ام ��� pushdown Automaton

&د 2�3ت $���1� ( ا�/�د � ا.و��$�ت ����, +*( ���� ($9 $�&س إ�5�6

& ��= ا���&س �&95 و)>; ا�/���: ا��� ���&ه� ا� �اا�<:�5�

<�= ا2+� �ل $� ��3� .�:ى أو ا����A ره� ��>��ى . أ�� ا���&س

Context-free Grammar ??

ا������ ا���ا �ي : ا�������ت ���. د ���� 11

� هDE ا���� : ا�/�د � $�Fل

Context-free Grammar

S → if E then S else S

ا������ ا���ا �ي : ا�������ت ���. د ���� 12

Parsing & Derivation

Context-free Grammar

E → E + E | E * E | (E) | - (E) | Id

Derivation of – (Id)

E ⇒ – E ⇒ – (E) ⇒ –(Id)

:�� آ� �ة ��� �����

) ����� ا���ال( �� ج ���ا�� nonterminal أي �

ذا ���������

ا������ ا���ا �ي : ا�������ت ���. د ���� 13

Parsing & Derivation

Derivation of – (Id+Id) ?????

(Leftmost) E ⇒ – E ⇒ – (E) ⇒ –(E+E) ⇒ –(Id+E) ⇒ –(Id+Id)

(Rightmost) E ⇒ – E ⇒ – (E) ⇒ –(E+E) ⇒ –(E+Id) ⇒ –(Id+Id)

ا������ ا���ا �ي : ا�������ت ���. د ���� 14

Parse Tree

ق ��Q25!"�� ا� +� �� �R!1(derivation)� H5ا� =NonTerminalsTerminals= ا0وراق �

E

E

E

E + E

( )

Id Id

@� �Jا�� S=� ة�*Uا� V,� 6"� �4� ق��Q2ا ��"!�

ا������ ا���ا �ي : ا�������ت ���. د ���� 15

ا���ف �� ا�� وا���آ� �@ "�ه��� ��� �� ا���ا�� ا������ و��ً�

ء/�@ ا8 ء ���� ا�!-�",� ا��+ ���*( ا)'�ا&� ت$ل �!"�� ا�!�� �� ا

:�/�ر ا�!��'� ء �ول ا����ز���� �� ء ���ة ا������ا�� ... �

�� �� �+ �!"�� ا��3�4 ا���2+ و����1 ��������1 ��6 �5/� ت 1ا�-�ج

�ا� ا������ �� ���� أ���� ����� ����

ا������ ا���ا �ي : ا�������ت ���. د ���� 16

Problems (1) !!!� ا� �ا� ا������ ا������� ����� أآ�� �� ���� �

-,�ة �*( ا�)'� �� &�% � ا��$��# ��اء آ�! Leftmost أو Rightmost

��ه� �0/�� ! �3Ambiguity�ض ا� �ا�

S → if E then S

| if E then S else S

| Others

if E1 then S1 else if E2 then S2 else S3

ا������ ا���ا �ي : ا�������ت ���. د ���� 17

Problems (1) !!!

S

S

E S

if E then

if then

S else

S

E S

if E then

if then

S

else S

ا������ ا���ا �ي : ا�������ت ���. د ���� 18

disambiguating ruleا��-�ام ، '!"� ر�else E و F* then أن �N1ن آ '!"� ���4رة ��@

@��!"Nا� @�� then �ـ F* else أن X ���else �5� then 34�"1(�ر : أي

�+ ا�J(�ر)��<�ا��+ S → Matched

| UnMatchedMatched → if E then Mch_S else Mch_S

| OthersUnMatched → if E then Mch_S

| if E then Mch_S else UnMch_S

Solution (1) !!!

ا������ ا���ا �ي : ا�������ت ���. د ���� 19

Problems (2) !!!Derivation of Id+Id*Id

(Leftmost) E ⇒ E+E ⇒ Id+E ⇒ Id+E*E ⇒ Id+Id*E⇒ Id+Id*Id

E

E

E

E +

EId

Id

E

Id

*

ا������ ا���ا �ي : ا�������ت ���. د ���� 20

Problems (2) !!!Derivation of Id+Id*Id

E

E

E

E *

E Id

Id

E

Id

+

(Leftmost) E ⇒ E*E ⇒ IE+E*E ⇒ Id+E*E ⇒ Id+Id*E ⇒ Id+Id*Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 21

Solution (2) !!!

Operator Precedence

ا������ ا���ا �ي : ا�������ت ���. د ���� 22

+� ق �1Z!�� �1� �@ ا��!� إ�6 ا�� ��ة، أن �1��Q5!"�� ا� @N! ��)��� ��[ ��"I (Left Recursion Prb.)

E → E + T | TT → T * F | FF → (E) | Id

E → T E1E1 → + T E1 | εT → F T1T1 → * F T1 | εF → (E) | Id

Problems (3) !!!

ا������ ا���ا �ي : ا�������ت ���. د ���� 23

A → A a1 | A a2 | …. | A an | b1 | b2 | … | bm

A → b1 A1 | b2 A1 | …. | bm A1

A1 → a1 A1 | a2 A1 | …. | an A1 | ε

Solution (3)

ا������ ا���ا �ي : ا�������ت ���. د ���� 24

@�1�� ر ��@ \�� ق �1Z!�� أن �1ا'[ �!"�� ا��Q5!"�� ا� @N! (Left Factoring Prb.) ن�N دون أن )� N�^� ���5� أ (!

1-� ر:

S → if E then S

S → if E then S else S�4 ج ���'� ا���ار�

S → if E then S ELSE_Part

ELSE_Part → else S

| ε

Problems (4) !!!

ا������ ا���ا �ي : ا�������ت ���. د ���� 25

Solution (4)

A → a B1

A → a B2

A → a A1

A1 → B1 | B2

ا������ ا���ا �ي : ا�������ت ���. د ���� 26

Top-Down Parsing ����� 4�5(�Leftmost Derivation

�� ا�,4ر و:�9 ا8وراق �Parse Tree)�ء

�� ا�$��� ا�;��� !Recursive Descent �� �� و�;أ���ب �) 4�5����� �A� #��$ إ�/�!�� ?<�ر :�=ت

Backtracking��ه� ! �C�D ���: ه)�كPredictive Parsing =

F�� �>'�Backtracking :�=ت

B�,��� �!� ل آ �` N! Predictive Parsing@ ا��_�ل ���ا�� 1I +� آ U�Left Recursion �4ن ا�� Left Factorized �4"��� أو آ

ا������ ا���ا �ي : ا�������ت ���. د ���� 27

Top-Down Parsing

Recursive Descent Parsing with Backtracking

S → c A d

A → a b | a

W=cad

S → c A d → c a b d → c A d → c a d

ا������ ا���ا �ي : ا�������ت ���. د ���� 28

Top-Down Parsing

Predictive Parsing (Without Backtracking)

S → if E then S else S

| while E do S

| begin S_List end

ا������ ا���ا �ي : ا�������ت ���. د ���� 29

Bottom-Up Parsing

أ���ب ��م �G ا��$��# %;�� ��9 �)�ء ا�0,�ة �� �� ة إ�9 ا��� ا�

�;�: �� ه4ا ا��8�ب وا���0 � أ-<� ا��KاIJ ا����Operator Precedence Parsing�Shift Reduce Parsing أو (LR Parsing)

��9 أ!<� Shift Reduce Parsing%�/� ا�)'� إ�9 �$�و�� ���*�� ا�,��� ا��G !$��<� وا���Dره� �<ف F(� رًا��ا��C�ل إ�9 ا���P ا=��اGJ ا�4ي ���ت ا��

ا������ ا���ا �ي : ا�������ت ���. د ���� 30

Bottom-Up Parsing

S → c A d

A → a b | a

W=cabdcabdcAdS

ا������ ا���ا �ي : ا�������ت ���. د ���� 31

ا��/���R ��)$� ا8و����ت �)�ء

S��/� ا������ ا8و����ت �ا��� ��� T��!�� ��(� ا��

G!�;� = nondeterminism �� ��0آ# ا8و����ت إذا آ�! :��)� ��9 وإ= Predictive Parser%�/� ا�$��ل ��9

Recursive descent Parser) A�backtracking(

Top-Down ParsingPredictive Parsing

ا������ ا���ا �ي : ا�������ت ���. د ���� 32

E → E + T | TT → T * F | F

F → (E) | Id

Top-Down Parsing - Predictive Parsing

E → T E1E1 → + T E1 | eT → F T1T1 → * F T1 | eF → (E) | Id

T E1

F T1

T E1+εεεε

F T1*εεεε

E )(Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 33

Top-Down Parsing - Predictive Parsingεεεε

+T +TE:

+T T

εεεε

εεεεE:

+T

T

εεεεE:

+

Tεεεε

E:

ا������ ا���ا �ي : ا�������ت ���. د ���� 34

Top-Down Parsing - Predictive Parsing

+

Tεεεε

E:

*

Fεεεε

T:

E )(Id

F:

E → T E1E1 → + T E1 | eT → F T1T1 → * F T1 | eF → (E) | Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 35

Ambiguity with the ε-production� If there is a Terminal

� Go to the corresponding Edge

� Else� Go to the ε-Edge

Top-Down Parsing - Predictive Parsing

ا������ ا���ا �ي : ا�������ت ���. د ���� 36

ا������ا و��ت

Top-Down Parsing - Predictive Parsing

Recursive Program

ا������ ا���ا �ي : ا�������ت ���. د ���� 37

Non Recursive Predictive Parser

Top-Down Parsing - Predictive Parsing

Non Recursive Program

New Form of Processing Mechanism

ا������ ا���ا �ي : ا�������ت ���. د ���� 38

Non Recursive Parser Components� Table of Productions� Stack� Input String� Processing Program

Top-Down Parsing - Predictive Parsing

Program

Input String

Production’s Table

Terminal & NonTerminal

Stack

ا������ ا���ا �ي : ا�������ت ���. د ���� 39

Top-Down Parsing - Predictive Parsing

E

$

Stack (Initial State)

a + b $

Input String (Initial State)

ا������ ا���ا �ي : ا�������ت ���. د ���� 40

Top-Down Parsing - Predictive Parsing

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

Table of Productions

If (X is NonTerminal && a is the Current Input Symbol)

The Program Consults M[X,a]

if (Not Error)

Replace X by M[X,a]

E → T E1E1 → + T E1 | εT → F T1T1 → * F T1 | εF → (E) | Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 41

First� First (E)=First (T)=First (F)={ (, Id }� First (E1)={ +, ε }� First (T1)={ *, ε }

Follow� Follow (E)=Follow (E1)={ ), $ } � Follow (T)=Follow (T1)={ +, ), $ } � Follow (F)={+, *, ), $ } (ex: Id+Id, Id*Id, (Id))

Top-Down Parsing - Predictive Parsing

E → T E1E1 → + T E1 | εT → F T1T1 → * F T1 | εF → (E) | Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 42

Top-Down Parsing - Predictive Parsing

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

Table of Productions (Using First & Follow)

For each production X → Yfor each a in First(X)

M[X,a]= X → Yfor each b in Follow(X)

if (X → ε) M[X,b]= X → ε

First (E)=First (T)=First (F)={ (, Id }First (E1)={ +, e }First (T1)={ *, e }Follow (E)=Follow (E1)={ ), $ } Follow (T)=Follow (T1)={ +, ), $ }Follow (F)={+, *, ), $ }

ا������ ا���ا �ي : ا�������ت ���. د ���� 43

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

E$

a + b $

Parser

Top-Down Parsing - Predictive Parsing

ا������ ا���ا �ي : ا�������ت ���. د ���� 44

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

a + b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T

ا������ ا���ا �ي : ا�������ت ���. د ���� 45

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

a + b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T1F

ا������ ا���ا �ي : ا�������ت ���. د ���� 46

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

a + b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T1Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 47

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

+ b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T1

ا������ ا���ا �ي : ا�������ت ���. د ���� 48

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

+ b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

ا������ ا���ا �ي : ا�������ت ���. د ���� 49

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

+ b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T+

ا������ ا���ا �ي : ا�������ت ���. د ���� 50

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T

ا������ ا���ا �ي : ا�������ت ���. د ���� 51

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T1F

ا������ ا���ا �ي : ا�������ت ���. د ���� 52

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

b $

Parser

Top-Down Parsing - Predictive Parsing

E1$

T1Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 53

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

$

Parser

Top-Down Parsing - Predictive Parsing

E1$

T1

ا������ ا���ا �ي : ا�������ت ���. د ���� 54

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

$

Parser

Top-Down Parsing - Predictive Parsing

E1$

ا������ ا���ا �ي : ا�������ت ���. د ���� 55

T1: ε

E1: ε

$

F: (E)F: IdF

T1: εT1: *FT1T1 : εT1

T: FT1T: FT1T

E1: εE1: +TE1E1

E: TE1E: TE1E

)(*+Id

$

Parser

Top-Down Parsing - Predictive Parsing

$

ا������ ا���ا �ي : ا�������ت ���. د ���� 56

S → if E then S S1 | bS1 → else S | εE → b

S1: ε

$

E: bE

S1: εS1: eS

S1

S: iEtSS1S: aS

thenifelseba

Multiple Entry ProblemFirst (S) = {if, b}

First (S1)={else, ε}

First (E)={b}

Follow (S)={$}

Follow (S1) ={else, $}

Follow (E)={then, $}

ا������ ا���ا �ي : ا�������ت ���. د ���� 57

LL(1)

Left ScanningLeftmost Derivation1 input symbol lookaheadNo Multiple Entry in the production Table

ا������ ا���ا �ي : ا�������ت ���. د ���� 58

Error handling for LL(1) Parsers �@ ا�!�Nس��NonTerminalم BIف ا�ـ

س�M&ا� N1�0 #D��O� ام��ا'

ت ا�, ر]� �+ ا�*�ول و�41 � ����� ا�-/� ا�� 1� �@ آ � �1\�� ا�- �� )�/-� )ر�/[ �� )� ل ا���Pل ��1Q RS ل ا�- �G!S Tا N1�M[T,$] R�5D '�,+ ا�&@�� @� RS

�YD $� R!� = ا�IdXأن ا�ـ Z

(Insertion-deletion)ا��> رًا �@ ا���K ا�!�4د �"-/� ه� ك �!"�� � P ن�MD أن #M&D &� �( ا��&5�. )1ً� GQف ا��&1( ا�&��H,( وإ� دة آً*,*اول .*د آ31( ا�*Gف وا��D�5; و ��� ً5�. )� �Mدة ا� �$ ا�*Gف وإ�D ؤه�� $�D

$��� �N1 /��ة ����� ا�&&�5D �1ب'���+� ر ا�31M( ا0,� ب ا�31M( ا�G*� ),1Mف و�� ء ا��&1( وا/-Q $�D

ا������ ا���ا �ي : ا�������ت ���. د ���� 59

Bottom-UP Parsing

Shift-Reduce Parsing� Operator Precedence Parsing� LR (k) Parsing

� Left-to-right Scanning� Rightmost derivation� K input symbols

A Handle� A substring used in the reduce operation in order

to obtain a successful parsing� Top of the stack

� Successful Parsing ??

ا������ ا���ا �ي : ا�������ت ���. د ���� 60

Bottom-UP ParsingE → E + E E → E * E E →(E) E → Id

Accept$$E

E+EReduce$$E+E

E*EReduce$$E+E*E

Id3Reduce$$E+E*Id3

ShiftId3$$E+E*

Shift*Id3$$E+E

Id2Reduce*Id3$$E+Id2

ShiftId2*Id3$$E+

Shift+Id2*Id3$$E

Id1Reduce+Id2*Id3$$Id1

ShiftId1+Id2*Id3$$

HandleActionInputStack

ا������ ا���ا �ي : ا�������ت ���. د ���� 61

Shift/Reduce Conflict� shift or reduce ?

Reduce/Reduce Conflict� Production to be used ?

Non LR (k) GrammarsExample:

S → if E then S

S → if E then S else S

S → Other

Conflict? (Shift/Reduce Conflict) – Why ?

Shift (if E then S) to else OR Reduce (if E then S) to S ?

Bottom-UP Parsing - Conflicts

ا������ ا���ا �ي : ا�������ت ���. د ���� 62

Bottom-UP Parsing Operator Precedence Parser

X�! �� Gودة �� ا�)$� ا����$� ����,��LR(k)�<# ا��)4�5 %و%ً� دون ا�$��Z 8دوات أ����

ا������ ا���ا �ي : ا�������ت ���. د ���� 63

Bottom-UP Parsing - LR Parser

ا�>��*��1ُ��-�م �"��5ف �"6 '!�9 ا�"= ت ً< ��1

E!� @� �� ��F ا�!�دون (Shift/Reduceأآ�R أbacktracking (�ً�� ا��-�ا�ً و�5

����!� �Rب أآ�"��B)� ]4ا ا8� @N! يBت ا���4 ا����+ ا� ��!*� ً� � ت ا���4 ا����+ ا�Bي !N@ ) �$\� ا��Iاء(وا1��!*� @�

��-�ام ا�ـ � ]4��Predictive Parsing ء ����� أآ>� ��J� +/5 ]��Nة أ�� �@ ا�*!"� / ف ا8Uاآ� @N!

ر و1/>�3 \�ا�� (� �@ ا��!�@ إ�6 ا��)4�� ���Reduce )�"� (

��� N�ب وإ�"� ����1 أ�1!��( ��Jًا �����5 �!"�� ا�!�� �و ً �(Bا ا8 g6 ذ�"� �� �)Yacc(أدوات 1

ا������ ا���ا �ي : ا�������ت ���. د ���� 64

LR Parser Components� Table of Productions (Goto & Action)� Stack� Input String� Processing Program

Bottom-UP Parsing - LR Parser

Program

Input String

Action

Terminal & NonTerminal

Stack

Go to

ا������ ا���ا �ي : ا�������ت ���. د ���� 65

Bottom-UP Parsing - LR Parser

E

$

Stack (Symbol & State)

a * b $

Input String (Initial State)

0

+ c

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → (Id)

ا������ ا���ا �ي : ا�������ت ���. د ���� 66

Bottom-UP Parsing - LR Parser

10

3

3

3

F

9

2

2

T

R 5R 5R 5R 511

R 3R 3R 3R 310

R 1R 1S 7R 19

S 11S 68

S 4S57

S 4S 56

R 6R 6R 6R 65

8

1

E

R 4

R 2

Acc

$

S 4S 54

R 4R 4ΡR 43

R 2R 7R 22

S 61

S 4S 50

)(*+Id

GOTOState ACTION

ا������ ا���ا �ي : ا�������ت ���. د ���� 67

if (action [s, a] == shift k) thenpush (a, State Number k) on top of the stack

new input symbol

If (action [s, a]== reduce k) thenpop 2 * (Length of the right side of production k)/* including the states */

push the production stored into GOTO[S’, A]where A is the left side of production Kand S’ is the new top of the stack after the previous pop

Bottom-UP Parsing - LR Parser

ا������ ا���ا �ي : ا�������ت ���. د ���� 68

Bottom-UP Parsing - LR Parser

0

Stack

a * b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 69

Bottom-UP Parsing - LR Parser

0

Stack

a * b + c$

Input

Shift 5

Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

ا������ ا���ا �ي : ا�������ت ���. د ���� 70

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

Id

5

ا������ ا���ا �ي : ا�������ت ���. د ���� 71

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input

Reduce 6

Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

Id

5

ا������ ا���ا �ي : ا�������ت ���. د ���� 72

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

F

GOTO (0,F)

ا������ ا���ا �ي : ا�������ت ���. د ���� 73

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

F

3

ا������ ا���ا �ي : ا�������ت ���. د ���� 74

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

F

3

Reduce 4

ا������ ا���ا �ي : ا�������ت ���. د ���� 75

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

GOTO (0,T)

ا������ ا���ا �ي : ا�������ت ���. د ���� 76

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

ا������ ا���ا �ي : ا�������ت ���. د ���� 77

Bottom-UP Parsing - LR Parser

0

Stack

* b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

Shift 7

ا������ ا���ا �ي : ا�������ت ���. د ���� 78

Bottom-UP Parsing - LR Parser

0

Stack

b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

*

7

ا������ ا���ا �ي : ا�������ت ���. د ���� 79

Bottom-UP Parsing - LR Parser

0

Stack

b + c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

*

7

Shift 5

ا������ ا���ا �ي : ا�������ت ���. د ���� 80

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

*

7

b

5

ا������ ا���ا �ي : ا�������ت ���. د ���� 81

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

*

7

b

5

Reduce 6

ا������ ا���ا �ي : ا�������ت ���. د ���� 82

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

*

7

F

GOTO(7,F)

Reduce 6

ا������ ا���ا �ي : ا�������ت ���. د ���� 83

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

*

7

F

10

ا������ ا���ا �ي : ا�������ت ���. د ���� 84

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

*

7

F

10

Reduce 3

ا������ ا���ا �ي : ا�������ت ���. د ���� 85

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

GOTO(0,T)

ا������ ا���ا �ي : ا�������ت ���. د ���� 86

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

ا������ ا���ا �ي : ا�������ت ���. د ���� 87

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

T

2

Reduce 2

ا������ ا���ا �ي : ا�������ت ���. د ���� 88

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

GOTO (0,E)

ا������ ا���ا �ي : ا�������ت ���. د ���� 89

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

ا������ ا���ا �ي : ا�������ت ���. د ���� 90

Bottom-UP Parsing - LR Parser

0

Stack

+ c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

Shift 6

ا������ ا���ا �ي : ا�������ت ���. د ���� 91

Bottom-UP Parsing - LR Parser

0

Stack

c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

ا������ ا���ا �ي : ا�������ت ���. د ���� 92

Bottom-UP Parsing - LR Parser

0

Stack

c$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

Shift 5

6

ا������ ا���ا �ي : ا�������ت ���. د ���� 93

Bottom-UP Parsing - LR Parser

0

Stack

$

Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

c

5

ا������ ا���ا �ي : ا�������ت ���. د ���� 94

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

c

5

Reduce 6$

ا������ ا���ا �ي : ا�������ت ���. د ���� 95

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

F

GOTO (6,F)

$

ا������ ا���ا �ي : ا�������ت ���. د ���� 96

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

F

3

$

ا������ ا���ا �ي : ا�������ت ���. د ���� 97

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

F

3

Reduce 4$

ا������ ا���ا �ي : ا�������ت ���. د ���� 98

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

T

GOTO (6, T)

$

ا������ ا���ا �ي : ا�������ت ���. د ���� 99

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

T

9

$

ا������ ا���ا �ي : ا�������ت ���. د ���� 100

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

+

6

T

9

Reduce 1$

ا������ ا���ا �ي : ا�������ت ���. د ���� 101

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

GOTO(0, E)

$

ا������ ا���ا �ي : ا�������ت ���. د ���� 102

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

$

ا������ ا���ا �ي : ا�������ت ���. د ���� 103

Bottom-UP Parsing - LR Parser

0

Stack Input Action

(1) E → E + T(2) E → T(3) T → T * F(4) T → F(5) F → (E) (6) F → Id

E

1

ACC$

ا������ ا���ا �ي : ا�������ت ���. د ���� 104

Parsing Table – LR(0) Items

A → X Y Z� A → . X Y Z� A → X . Y Z� A → X Y . Z� A → X Y Z .

LR(0) Items1( � �# ��اQ+ �&1,( ا�&-< �Q�� RS R6�&��5 �# ا��_ء ا�.

� #,&�ام ر��' � !1,@&. $�D))�Hا�� C�ة و��� Hا� $�)ر

ا������ ا���ا �ي : ا�������ت ���. د ���� 105

Parsing Table – LR(0) CollectionE1 → EE → E + TE → TT → T * FT → FF → (E) F → Id

I0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

C:= { Closure ( { [ E1 → . E] } ) }

ا������ ا���ا �ي : ا�������ت ���. د ���� 106

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I1 =E1 → E .

X=E

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 107

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I1 =E1 → E .E → E . + T

X=E

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 108

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I1 =E1 → E .E → E . + T

X=E

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 109

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I1 =E1 → E .E → E . + T

X=E

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 110

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I1 =E1 → E .E → E . + T

X=E

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 111

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I1 =E1 → E .E → E . + T

X=E

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 112

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I1 =E1 → E .E → E . + T

X=E

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 113

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I2 =

X=T

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 114

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I2 =

X=T

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 115

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I2 =E → T .

X=T

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 116

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I2 =E → T .T → T . * F

X=T

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 117

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I2 =E → T .T → T . * F

X=T

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 118

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E)F → . Id

I2 =E → T .T → T . * F

X=T

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 119

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E)F → . Id

I2 =E → T .T → T . * F

X=T

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 120

Parsing Table – LR(0) CollectionI0 = Closure ( { [ E1 → . E] } )

E1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

I3 =

X=F

For each Production & For each symbol XIf GOTO (Pr, X) not empty and not computedS = S + GOTO (E1 → . E, X)

If there is a (. Y) where Y Non Terminal thenCompute Closure (S)

ا������ ا���ا �ي : ا�������ت ���. د ���� 121

Parsing Table – LR(0) CollectionE1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

E → T .T → T . * F

E1 → E .E → E . + TE

T

T → F . F

F → (. E)E → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

(

T → Id . Id

0

1

2

3

4

5

First Phase: starting from I0 and Parsing the symbols E, T, F, (, Id we’ll get the states I1, I2, I3, I4, I5 respectively

ا������ ا���ا �ي : ا�������ت ���. د ���� 122

Parsing Table – LR(0) CollectionE1 → . EE → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

E → T .T → T . * F

E1 → E .E → E . + TE

T

T → F . F

F → (. E)E → . E + TE → . TT → . T * FT → . FF → . (E) F → . Id

(

T → Id . Id

E → E + . TT → . T * FT → . FF → . (E) F → . Id

+

T → T * . FF → . (E) F → . Id

*

F → (E .) E → E . + TE

E → E + T .T → T . * FT

T → T * F .F

T → (E) .)

0

1

2

3

4

5

6

7

8

9

10

11

ا������ ا���ا �ي : ا�������ت ���. د ���� 123

DFAا��)��ج 11 ,… ,0ا�4 2ت �)ا����ز(ا�� \$ت �

�Simple LR Parsing Table)�ء

Parsing Table

ا������ ا���ا �ي : ا�������ت ���. د ���� 124

SLR Parsing TableActions� Accept

Since [E1 → E .] Is in 1 Thenaction[1,$]=Acc

� Terminals: ExampleSince [F → (. E)] is in 4 using ‘(‘ from 0 Then

action[0,’(‘]=s4

Since [F → Id.] Is in 5 ThenCompute FOLLOW(F) /*$ is in FOLLOW F */for each terminal a in FOLLOW(F) do

action[5, a]=‘Reduce F → Id’ (Reduce PROD_NB)/* Example=action[5,$]=‘Reduce 6’*/

ا������ ا���ا �ي : ا�������ت ���. د ���� 125

SLR Parsing Table

GOTO� NonTerminals: Example

Since [E1 → E.+T] is in 1 using ‘E’ from 0 Thengoto[0,’E’]=1

ا������ ا���ا �ي : ا�������ت ���. د ���� 126

SLR Parsing TableSLR(1) Parsing Table for the Grammar(Table composed of ACTION & GOTO)

SLR(1) Grammar is always Unambiguous GrammarUnambiguous Grammar is not always SLR(1) Grammar

The construction of a SLR Parsing table for some unambiguous grammar produces a

Shift/Reduce conflict

We need more information when we compute the states in order to avoid the conflicts

ا������ ا���ا �ي : ا�������ت ���. د ���� 127

Shift/Reduce ConflictS → L = RS → RL → * RL → IdR → L

0S1 → . SS → . L = RS → . RL → . * RL → . IdR → . L

1S1 → S .

2S → L . = RR → L .

Action[2,’=‘]=shift 6

But Since:

1- State 2 contains R → L .

2- FOLLOW ( R ) = {=, …}

/* because S → L = R → * R = R */

We should have:

Action[2,’=‘]=‘reduce R → L’

CONFLICT

6S → L = . RR → . LL → . * RL → . Id

2,=0,L

0,S

ا������ ا���ا �ي : ا�������ت ���. د ���� 128

Parsing Table – LR(1) Collection

I0 = Closure ( { [S1 → . S, $] } )

S1 → . S , $ [First(εεεε $)]

C:= { Closure ( { [ S1 → . S, $] } ) }S1 → SS → L = RS → RL → * RL → IdR → L

Searching for loakaheadterminals when we have to bypass a nonterminal

ا������ ا���ا �ي : ا�������ت ���. د ���� 129

Parsing Table – LR(1) Collection

I0 = Closure ( { [S1 → . S, $] } )

S1 → . S , $S → . L = R , $ [First(====R $)] for LS → . R , $ [First (εεεε$)] for R

C:= { Closure ( { [ S1 → . S, $] } ) }S1 → SS → L = RS → RL → * RL → IdR → L

��������������������������������������������

�������� �������� �������� �������� ������� �������� �������� �������� �

������������������������������������������������

�������������������������������������� ���������� ���������� ����������

ا������ ا���ا �ي : ا�������ت ���. د ���� 130

Parsing Table – LR(1) Collection

C:= { Closure ( { [ S1 → . S, $] } ) }S1 → SS → L = RS → RL → * RL → IdR → L I0 = Closure ( { [S1 → . S, $] } )

S1 → . S , $S → . L = R , $S → . R , $L → . * R , =L → . Id , =R → . L , $ [First (εεεε$)] for L

��������������������������������������������

�������� �������� �������� �������� ������� �������� �������� �������� �

������������������������������������������������

�������������������������������������� ���������� ���������� ����������

ا������ ا���ا �ي : ا�������ت ���. د ���� 131

Parsing Table – LR(1) Collection

I0 = Closure ( { [S1 → . S, $] } )

S1 → . S , $S → . L = R , $S → . R , $L → . * R , =/$L → . Id , =/$R → . L , $

C:= { Closure ( { [ S1 → . S, $] } ) }S1 → SS → L = RS → RL → * RL → IdR → L

��������������������������������������������

�������� �������� �������� �������� ������� �������� �������� �������� �

������������������������������������������������

�������������������������������������� ���������� ���������� ����������

ا������ ا���ا �ي : ا�������ت ���. د ���� 132

S1 → SS → L = RS → RL → * RL → IdR → L

S1 → . S , $S → . L = R , $S → . R , $L → . * R , =/$L → . Id , =/$R → . L , $

0

S1 → S . , $

1

0,S

S → L . = R, $R → L . , $

2

0,L

S → R . , $

3

0,R

L → * . R, =/$R → . L , =/$L → . * R , =/$L → . Id , =/$

4

0,*

4,*

6,*

S → L = . R, $R → . L , =/$L → . * R , =/$L → . Id , =/$

6

2,=

L → * R . , =/$

7

4,R

R → L . , =/$

84,L

6,L

L → Id . , =/$

50,Id

6,Id

L → * R . , =/$

9

9,R

L → L = R . , $

10

6,R

ا������ ا���ا �ي : ا�������ت ���. د ���� 133

Parsing Table – LR(1) Collection

x…..R → L . , $…….

y…..R → L . , =…….

In the DFA we should have two set of LR(0) items (core):

Merging the states with common cores can reduce the error generation when we push states into the stack

The presence of the LookAhead symbol gives us the possibility to expect the following symbol

Since we can present in the same state many solutions and if theshift solution is not available we can use the reduction solution.

ا������ ا���ا �ي : ا�������ت ���. د ���� 134

LALR(1)

��;% 9�� LR(1)

م ]��ا���� D�ارز���ت !5^ %

ا������ ا���ا �ي : ا�������ت ���. د ���� 135

LR Parsing

SLR - Simple LR (LR(0) Collection)� Reduced Table, Not General

CLR - Canonical LR (LR(1) Collection)� General Grammars� Huge Table

LALR - Look Ahead LR (LR(1) Collection)� Simple, Reduced Table, General