Post on 02-Feb-2023
ا������ ا���ا �ي : ا�������ت ���. د ���� 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
ا������ ا���ا �ي : ا�������ت ���. د ���� 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) !!!
ا������ ا���ا �ي : ا�������ت ���. د ���� 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ي ���ت ا��
ا������ ا���ا �ي : ا�������ت ���. د ���� 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.