Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙...

41
!" ! # $ % & ’ &( ) * +, $% -./(0 PL/1 12# &!" 3456 7 347 8 59) 347 8 5# & " 8 :# !" 9 9 * +, ;4 <= 5# &! 4>9 ( ? & % <= @9 $" $ &>8 5# & 4>9 " A # 12# # 3 <= 12# B- 4) 9C " 8 !" < ( D E4 12# &>8 !# 12# F’G <= F’G ( H I JK> L 12# 45 JK> 8 5# & /M7 $!# $N- <= 96 .97 := <= L O-G 5# & !" " # &1! 1! $88 $% # 5# & 347 P # 7 & % 4>8 $% 1! 9 # ) Q &R% 1! . !" ! 4ES L" # # & 347 9 &1! A &1! 9 T# 9 55# 347 9 356 +, * +, - U9 (7 V1W # 5# & $ $* X Turbu C X (7 8 . ANSI C ? Y 41K $9M> (Lexical analysis D Y 41K $9K (syntax analysis H Y &R5U 41K (semantic analysis Z Y &4 # 4>9 (intermediate code generation [ Y L # $ 54 code optimization \ Y &RL # 4>9 (code generation $% ]S :!% ]S ]7 3 ^ , _0 ^ 8 ^ % ! /8" ^ % ]S 3 34 ‘ 5% & 4(E 12# :7 : E Compilers principles, techniques and Tools

Transcript of Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙...

Page 1: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

�����������

�������

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

�����

� ���������� � ���!"����!���#�����$��������%��&����'��������������

�� ���������

����������� ��&(��������� ��)�*��+,��$�%��� ������-./�(��0PL/1���1��2��#�&!"����3456����7��347����� �������� �8�

�5�9)��

��������347����� �8��5#�&����"��8�:��#��!"����9�������9�������*��+,���� ����;4���<=��5#�&!���4>9��

��(�?��&������%��<=��@�9�����������$��"��$���&>8��5#�&���4>9����"����A��#��1��2��#��#�����3�������<=�����1��2��#�B�-

��4)���9C���"��8��!"����<�� ��

��(�D�������E4��1��2��#������&>8�������!#��1��2��#�F'G� ���<=��F'G��

��(�H��I����J�K>� ����L��1��2��#��45���J�K>� ��8��5#�&��/�M7��$��!#�$�N-��<=���96�.�97�:��=�����<=�� ��������L��O-�G

�5#�&���!"����"��������������#���� ���� ��

��������&1�!����� ��1�!���$�8�8��������$�%��#���5#�&��������347����� �������P��#��7��&�� �%��4>8��$�%��1�!����9����

��#�����)�Q����&R�%��1�!���.��!"����!������4ES�������L"��#�����#�&��347����� ��9��������������� ���&1�!�����

�����A&1�!����9���������T#��9������55#�347����� ��9����3��56�������������

���������������+,���� ���������������*��+,���� ������ ���-����U�9���(7�������� �V1W���#��5#�&��$�����$*

��X�����Turbu C��X�������� ������������(7�������� �8�.ANSI C

?Y��41K�$9M>�(Lexical analysis

DY��41K�$9K��(syntax analysis

HY&R�5U���41K��(semantic analysis

ZY&��4���#��4>9��(intermediate code generation

[YL�#�$ ����54�code optimization�

\Y&R�L���#��4>9��(code generation

�$�%�]S�:��!%���]S�]7�3��^�,��_ ���0�^�8^�%���!��/8�"�^��%�]S�3���34�`�������5%��&���4(E������1��2��#���

����:�7�:������E���� �����

��

� �����

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

Compilers principles, techniques and Tools

Page 2: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

��

��

��

��

��

��

��

��

��

��

��

��!��" #$�%

�&,���41K�����1��2��#������Linear Analysis��$9M>��41K��.�lexical Analysis��]�90��41K��.�scaning Analysis� ���=)�

�97�&�� ��������L�P�:�55#���"��������4�����8�:���9���������a6� ������%���#���#)8�:��@�����F%�����,5��$�%�������Token����A�

�8��%��&�Token�%����95����345b!%�8���97�&��:�4�c�&C������-����%���!��/8�"�����57��&��$9M>��)��41K��&"8����#�

����$9K�����141K��8������������34�@��8�$9M>��)��41K��&����������97�&��:��=����$9K���)��41K��$�8�8��

�%����E��d1�S��Q�9���Token�%�� ���5�������

$�41#���!1#�keywords�

�%���1!��operators�

�%���e�literals���

�%����57�identifiers���&1#��9f���8��%���8��.g�9��.�%��4M���&��������#)��5#�&��h�S�������#��#�&�����97�&����=��

�%�:�55#��"�delimiters�

���

���

;

tab

space

��

�������Token ��$���a=b+2

��

��&���

�$9M>���141K�comment�%����K4i9��&>���$�%��1C�-�8��5#�&���������white space�����"�F%� ���#�����%����57�$�%���#���#��#���

�%��&��_��;)�����P��%��j��&R�,���)��8��5#�&��IkG�����5#�&�� ��������������TX��^6a��^�&��_��;)����&R�,��$9M>��)��41K�

�5#��

��

��������� ��

��������� ��

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

������!��!���

���"��!��!���

������!��#�$����"%

�" &'$�()!* �+��,-��.�#���/

!01�������%

%�!&�������

Token value ���Token type

������������a������� ����������id����������������

w w w

. i t

9 8

. i r

Page 3: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

� �

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

��!��" !��%

�������1<1���41K�&�Hierachical analysis���;'�� .��parsing analysis� �$9K�����syntax analysis� ��97�&��:�4������141K��

�8��� ���`9�������)�3�7�����$9K�Token ��9�����)��8�����������P�B���7��������9�������$���$9M>���41K�� ��&�-�����$�%�

8��%��&��_��;)��,���7������ ���`9���%��&��&R�5U����141K����&"8�����95�������B���7����������).��� ����TX��C��)��

��(7���$�9���);0( ++= iifor�%�4��j��$9K��$�,��F47����7�����

'(�)*��%���!���

���Q9��/��5#�&R�5U����141K���=4l8�3���!L��Type cheking������ ��!���7�� �'��Q9���������)�����)8��%��&����'������Q9�������

�%�4��_��;)����Q9��������$�,����������������� �� �� �� �� ������������������Q9�������←+ intfloat��

�,�←+ charfloat��

��

'��������))���$ ���

�97�&��������&��4���� ������$�8�8�������]S�3������ &��4���� �3�����9�4���4�E��&��;����347������$���$�������������

��#� &��4���� �3���A��G���7������������c�m�9��&�<����

����$ �+$ ,����7�����P��P�$����#��4>9������97���-�)��O�����:����������(����G����&�,5��347����� ��

�-.�/�0��0�����+$ ,��������&�,5��347����� �7�����P�347����� ����P��������#��7��$����9)� ���

'������"����)�,0��

]S�3�������#����TX���97���"�����g�����#���P����&��9C���&��4���#�����97�&��&U��+func(b)�a=func(b)����8��$�"���

�g���&��9���-func()�g���3���������0���b������8�:�7�&��9���-�������� ��n2��8��97�&����S����A9���4M����������P�&�E)��

�97�&��:��=�����A9���4M����������

<46��97�&!����'���&��4���#���:��!%�$ ����54L��!���#�3����4>��o��

h�9"Y������-����.�#� ����54L�&>8������(E������������#���#�8��97�&����'����������:��!%�&��4���#��4>9���!�����95����

��4)�&��$�8�8��

'(�,�����))���$ ���

�97�&����'���347���$8������"����A�&1�!����#��1G���3������ ��<���&��:�E��:��=�������e� ���P�����#�&��4��:�7��4L���#�gA�8���

�97�&��:��=�������e� ���P�����#��97�������$�#����

��1��2��#��G������ ��(7�/�X����95���p=i+r*60 ���%��&����E������9����3���$8�������2��#� ���1G����%��4e���8��:�7�p�-

��#����i,p,r�Q9�� ��&�!%�real�5�<%����

��������

��

��

��

��

→+= →+=analysissyntaxanalysislexical

idididrip 60*:60*: 321 :=

1id +

2id

3id

*

60

→analysissemantic

:=

1id +

2id

3id

*

60

inttoreal

���

���

���

+=

= →

��

��

=

+=

=

=

11

12

12

2

23

121

31

31

223

132

1

int

,

,

,

,0.60#

,

0.60**

)60(int

idRMOVF

RRADDF

RidMOVF

RMULF

RidMOVF

tidid

idt

tid

tidt

tidt

torealt

generationcodeoptimizercodegenerationcodeermediate

w w w

. i t

9 8

. i r

Page 4: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

�1�&�'���&����� ������� -��]Sfront-end�&>8�������<(���%�347�����!��$����1��2��#����back-end������8�=���d1�S��$�%�347���$����

2��97���79��������3������ �'���4W���#���#��)�$9M>��41K��scanner���%�4��q4SE������P���942��#��91�Yrs���

�#9��������������2��#��5���-�����1G�������%�3$9M>�;4>��P�Lexical����9E4��&R���57� �� P���942��#�&��5L�Yr?�

���1G������$9M>��41K�FRT��/8�"����8�����������9"9��$�%����57��41#�symbol Table���9E4�� d>9�Y�7�����4%���

�back-end���1G��� ��&ES�54L�$ ����8�7�������<�8��#�&R�L���#��4>9���1G���7��&��.����34�d>9�Y�7�����4%����

��34��8�=�compiler�8�preprocessor��#�&>�G����.�%�4����'���������$8�����&R�5U��8�$9M>��41K���1��2��#��#�����3������

preprocessor�%�4!����'��������#�3����d>9�Y�7�����4%����

�front-end ��:��=�����4>��8�back-end���1��2��#���front-end��56�V4#���t�����.�%�8�back-end���1��2��#�u��9���������

����d>9�Y�7�����4%���

�����.�7��:�E���T���T�A����57��#�&��9C���&R�5U��$�,��%�4��j��� �� ���09�Yd>9��

���M>����������������`9���$�%��,��dE#��=4l8�$9M>��)��41K������h��#Y��9����40�

2�9������;:7var integertemp =�M>�$9M>��)��41K��.�7��&��/�(��0��� ����#�temp7���� ��%�4��_��;)��,����95�������

�97�Q8�7����������������57����/�(��0�����

2������/�(��0��� ���.=:BA��,��$�����h�<����+4KC�V4���������������4>����7��&��$9K��$

������Y�.������/�(��0��� ����thenbaif =(��7��&��$9K��$�,��$������%;����0�� �9�������4>�����

Y���%�4�����A�&������9���������:�9������$9K���O�� ���#�&���������9�����&5U��&R�5U���)��41K���

��

+��12��3'���������3+�4� ���

2����8��5#��44M���#��>9��]S��L5������&-�#��L���$v9>95(��8��%�347����44M�����k>��79��347��� �����<����9��&������1��2��#

�1��2��#�$�%�]S�������

2��#�:��=����&��4���#����#����g����$�����9��&�����347��� �����<���#� ����54L�����Q9�����"9���8���'4������.47��.3

�9��%�9���54L�3(!���G�����#

�5�0'������ ��6��5'����"�7��'��2 8�0

?Y&1�!�����7��#��

DY$9K���CT������

HY����P�����T!"

���#��4>9��&1�!����#�$9K���CT������� ����9��&��&)������$��9<0�]��!40������

��

��

��

��

��

w w w

. i t

9 8

. i r

Page 5: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

$9K���)��41K��d��l8��

?Y�����8��KC�&�����������M>�V4����&�������������������&������

DY/��5#�����"�&����Flow of control checks �������TX�.Break��� ����c��1G�3���(��;�� ��w8���V"9���while.�for.�switch�

�%�4��j���,��$����1G�3456���9�����9C�����#����)�&��

HY��������TX��.��9��-�����K5��/��5#Lable�97��%�l������������������4A���<���&��

ZYAda��� ����TX��.@�����$�%��������#��6���<���&���#������9���������$�L����8����������������$�������1G���

�57����<(�

[Y��6���������#9���9��$�%��

��

���)�2��3� 9��:�;��'(�)*��<6��!�=� ���"�2� ���'>�0

�0�7����2��'%)7��7'�2�����x7����x7���&�5%�!%�/�8��d��U��������/�8�����&��9���-� C�����x ����TXx����$�x%������x0����xU��

�7����7���&�5%�!%�g���d��U����������L�P�V4����8��L�P�Q9��.&>������

� ����)� '�2�0���&�����A�&������9����1!�����$�%���91!��Q9���!<A�3��������4)�� 12 ������TX�:]5.1[ =a���&R�x5U��$�x,��

����P����n�������� �������9"8�a���7��$��E�����������&�<������

� �6����b ������������g!"��!����'���$��������8�=���$��E���8�+4KC�������$���g!"���41!�ac +=c����x#�&��9xC�������8�

bfloat���Q9�� �����8�aint���Q9�� ������%�4����'������Q9��y�������!��&R�5U����141K��.�7��� a����4M�����A9���#��5U��3������Q9x���xfloat������x���

�9E4���

?��*���#���2�0 ��7��:�E��d��U�����8��$�4M���z4%�����5#�&��&����&R�5U����141K�

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

w w w

. i t

9 8

. i r

Page 6: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

�������

������� ��

�������� ��

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

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

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

������������������n

�������������� !����

�������������� !���2

���������������� !�3

�������������� !���n

����������

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

����������� ����������������C����������������������������������������������������!���!�����!��"��!#�$!%���&���!�����!'��

����% �(�����)��'���%�����*%��%������������+����)�n������ �,������������� �&��-���������C�������.�/,�0��� �+++����K������!��������!���!�������!���&��-�

������"��#�$%���&��1��nk����2,�� ������%������+���2,����%3���0����4�� ����(����%�����&��-��$%��&�5%��+����!����%�!������(6�� ��7/8�$%��79�����

����������:&�;�,�������<6=���������'+�������� �*%����7/1�$%���������!>'������!���!� �$!%����������4��������������&��%��)����?���&���

������ � ��@�,�:&�������������>'����A6��� ��������+������������������� ��!��"������������#����������$��%���& '��������������"���()�

���������������"���()������ ������*� ��+ ,���!��"�����-������������������$��%��& '������"������� ��!��"�����.���!��"���������������������

/ 0 1�����������������������*2��+ ,���!��"�����-��������������"�34,�5��

��

��

������B���$%�� ��:&�;�,����n���4��� ���k������������������n�������'���k�2,�� ���������<6=���

���>5��&���n+k���������%����� 2,��C���9����&����8�������D��$%���% �7/1+ ��

��

��

��

��

��

��6������0���7���8���� ���������������������������/ ��%��

E�9��F��)&�,��

E�A6��� � ��������'�.G6�,�

E��4��� � ���)����<6=�.G6�,�

E�)��H�0�I���

E&�5�:&�;�,��2����J�I%�3K�

E�����L���2=�,�I%�3K����2�!,����!����%�!����

�%�'������� ����%�'���3K�+��

��

��

��

��

��

��

��

��

������� ��

���� ���"��

�������

�������

��������

w w w

. i t

9 8

. i r

Page 7: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

� ������������������#

� 9:��; �<%� ������=����$���M,������1�������4�����������%���������!��������!��"��#�����&����������������N��;�O��$%��>P��

��%�������8��Q��8����������������������1�4��% �7/1���RL��S���T��$�K�)����J�:�T��������%35�����&����$��:���&����8�����+��

��

��

��

��������������.����% ��%�.�������"��#���������� �&�1�� �,�:&��0�����������2,����&�UT�����������-�� ���� ��

���&����,��0���������-��$���+��

�;���>��'�� �����

E����L��������VK�WX9"�T�D����������

E��Y��B��3)��

������5�N�� ���������F�Y��:��>1�N�Z4�������M�����������������&��-��������������������������������������"��#������������

����Q�8�3������&��&����J�N��&����$�������+������B��3)�3������2,��:&�&�[���Y���������Y��:��>1��Y��\G=��\�S���$%�������+��

�8������*2���-������?������������� �� ,�"�2��� @��7A��B� C���65��

E�)&�,��

E��]����^����

E7>9�2����J��

�1��2=��

��&���&������,��0�����.�>=��$%��������_�K����2,����,��0� �����:��H�0��1�����"�T�D������L��������VK�WX9����`�����=��J�:��

��������&���\�5��+��

���0�����%?�=��

��&�.�>=��$%��&�&����J�2,���&����7>=�*%�������������������������������2=�,�&���]�������������P>��$�K�)��?���&�����&�

������&�1����^�����I%�3K��<4,+��

3$D�* ���E=��

:a%�����������������`���������&�&���J�.�>=��2G=�Gb�c�.�/,�0��&���& �����������������(�����&����2%�%��.�>=����F�$�>�

��&��� ������&�����]�������S���T��7>9�2����J+��

��2,��������>�����%���������$%����)�2J����� �������d�&�1�:&�;�,���K��� ���%�����%�4��]������2=�,��%���@0���&���\�5���

&�1���2=�,�$�K��]���e=����K��+��

��7F�*��2�G�=��

��%���RL��S���T� ���������������������� ��������$%��7�L&����$%���������&���\�5�������&����7>=����2,����%����� ��� �K��P��

&�&�\�5����&����7>=�*%�2(%���1������K��� ��:&�;�,��B���$%���1�������;�2=�,�I%�3K��2P'��1��� ��:&�;�,��+��

��

�����������*%��1����/��)�:��1�������&�����&�����K������

�������f�&�������'��9���*%��������������������+��

����������������f�������������������8�������Q�8�������������&�����

��$%&%���� � ��'(��)���* +,-������.

� �/ �0�1&���2�3�45�%����6�&����� �7

�6�&����� $�8��

second halfFrist half

w w w

. i t

9 8

. i r

Page 8: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

� ������������������9

���G @��1����,����( @����H ������������� ��I� J���"�34,���+��

��

��

��

��

��

��

��

��

��

��

��������� �����������>���������(%�6�&��-������������%��&� �����(%�6�����&����������������(%�6�*%N�79�:������4PS�� �����2,�

�����:&�;�,���

��4PS���������������

��>��������P�����4PS���������:a%������������&��)������J��K���3'����2,����2(���$��g+��

��

��

��

��

��

( @����H ��������G @��1����,�����������!�#�;���-������������$I�� ��I� J���"�34,���+��

��

��

��

��

��

��

��

��

��

��

��

��

��

1

;

1

;

+=

+=

forwardforwardelse

end

halffristofbeginningtoforwardmove

halffristreload

beginethenhalfsecondofendtheatforwardifelse

end

forwardforward

halfsecondreload

beginethenhalffristofendtheatforwardif

eofeof

second halfFrist half

end

inputofendgsignifiyinbufferawithineofelse

end

halffristofbeginningtoforwardmove

halffristreload

beginethenhalfsecondofendtheatforwardifelse

end

forwardforward

halfsecondreload

beginethenhalffristofendtheatforwardif

beginetheneofforwardif

forwardforward

/8/*

;

1

;

;1

+=

↑=

+=

w w w

. i t

9 8

. i r

Page 9: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

�������������������:;

"�2���� @��I�K�� ������

hE��RL��S���T���L�� ��:&�;�,�������7�=���(�,��&�������

iE�� �N��&��&����2%�%��"���/�� ��:&�;�,������(�,�� �,��������� �*>������ �,�:&��0

jE0���4>,���� �*>������ �,�:&���&������6�(�2%�%����

�7b���%�)�������%�������%��������������L�����%������1&�������^�����3��������7�=���(�,��&��������

�����7%�4��7��J��>?��"��4=���������&���I%�>���?��"��4=����,�����������$���������SL������2,�+��

7/1�&�>��$�L������\�J�����W��9� ������L�4�&� ��2,��"��4=��,��1�Q��8��:�=�J����&����8���������,��1������2L�9����R����&�>���% �

��1���W�9�N+��

��

�.�9������������Q�8�������+��

�.��'��� ��� ��

��

��

�.��' ������

��

��

��

��

��

��

���������������/%�&�1���7�/8���;L���&� ������������6���S%&��������

&�1�:���k����&�>��.��'��&�$����2(%�����$�������$�K�%� ���-�+��

&�1���:���k��Y,�$�L���:��>1���\������������&�>��.��'��&+��

��

<��1�=.+>

�-$��?��8$�1

���1

>< valuetokentypetoken ,

letter other 3s��1s�� 2s��

4s��

Letter/digit

stare

digit

w w w

. i t

9 8

. i r

Page 10: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

����������

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

�������������� �����<=<<>=>=> ,,,,,��

gratherG

EqualE

leseL

:

:

:

��

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

��

��

��

��

��

������ !"#$�%�����&�����������'��

��

��

��

��

��

��

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

��

����� ��(��)���������� !"#$���

112

112)/(

134.12.

134.12)/(.

EdigitEdigit

EdigitEdigit

EdigitEdigitdigit

EdigitEdigitdigit

+−+

+−+

��

��

��

��

��

��

��

��

��

��

12�� 13�� 17��14�� 15�� 16�� 18�� 19

digit

digitdigit otherdigit

digit digit

. E −+ or

E

digit

lette

r

othe

r 11��9�� 10��

Letter/digit

stare)(id�� return

w w w

. i t

9 8

. i r

Page 11: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

���#���(��)���������� !"#$��

digidigit.��

��

��

��

�(��)���������� !"#$*!+)��

��

��

��

��

����������� ������!��"#�$�%&�'����� ��(�����

��

��

}

;

}

/*/*:

;:():25

;:25:20

;:20:12

;:12:9

;:9:0

{)(

{

()int

;0,0int

startreturn

errorcompilerdefault

breakrecovercase

breakstartcase

breakstartcase

breakstartcase

breakstartcase

stateswitch

fail

startstate

=

=

=

=

==

��

��

��

�������

����������������,-���.���/��$�0��%����1!����2�������3�������45��.����6�����7.����28������.�9��:������(��)�/����������� �

����.��.���������������!-��/3�����

��

����������� ���������)&�����*���!���*+,� ����

��

��

��

��

22��.

24other �start

20�� 21��digit

digit

23��digit

digit

27other �start25�� 26��

digit

digit

w w w

. i t

9 8

. i r

Page 12: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

(�+!;�$<=��$��� �������������.����>����?6 ��@8�A������

����������B)��������!���� ������������������������.���

� ��������/������C�����,2�D�8�������������8����6����!�����

����6 ��@8�A�������A�.��E/��$�/>����������.��������������

��A�.���/��$�@8�A�������8���#!.����������������5�FG�����

����.������������8���#!.��������5���?6 ��@8�A�������6����

���5!.�������������.������������#&?6 ��@8�A��0�?3�'���

��

��

��

��

��

�����,2�D�@�-����%�>�����0����!���(� ��� !"#$�������

�������B����8��/���0��8��������0�(H�D����I$�J �����������

(� ���,����E��KL�J����!.�/!��L�,���8����������?3#.��

E�6 ��@8�A��������0�MG������!����������5������#��@8�A�������

��������

�,���������=��$�%�����

���=��$���������������������/��$�����������!���� �����

���������������8���#!.���������FG�N���.����#��������!.��������

��9,10,11,�����!���(� ��� !"#$��������

������J������.���3$��#!������O��/��$����,����E� �����

�����I��J��!����5�/�0�MG����� ������.�P�������@8������

�8��H���,������

��

��

��

��

��

��

��

��

��

��

��

��

��

��

;

();

;16)''(

15))((

();:15

;

();

15))((

();:14

;

();

;16)''(

;14)'.'(

;13))((

();:13

;

();

;13))((

();:12

;

));((

);(;)(:11

;;11

;10))(||)((

();:10

;

();

;10))((

();:9

;;;;)(:4

;;;:3

;;;:2

;

;4

;3)''(

;2)''(

);(1

;

);(

;6)''(

;5)''(

;1)''(

};0,_{))(();(:0

){(

{)1(

break

failstateelse

stateEcifelse

statecisdigitif

nextcharccase

break

failstateelse

statecisdigitif

nextcharccase

break

failstateelse

stateEcifelse

statecifelse

statecisdigitif

nextcharccase

break

failstateelse

statecisdigitif

nextcharccase

break

valuetokengettokenreturn

valuetokeninstallcungetchcase

breakstateelse

statecisdigitcisletterif

nextcharccase

break

failstateelse

statecisletterif

nextcharccase

breakLtokenvaluereloptokentypecungetchcase

breakNEtokenvaluereloptokentypecase

breakLEtokenvaluereloptokentypecase

break

stateelse

statecifelse

statecif

nextcharccase

break

failstateelse

statecifelse

statecifelse

statecifelse

statebeginninlexemecisspaceifnextcharccase

stateswitch

while

=

==

=

=

=

=

=

=

==

==

=

=

=

=

=

=

=

=

=

=

=

==

==

==

=

=>==

====

=

=

=>==

====

=<==

=++=

���

��

���

��

���

����

�@8�A6 �?���

w w w

. i t

9 8

. i r

Page 13: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

��

��

-�./���� ��������

��

��

��

��

}

}

;;'');(:27

;

;27

;26))((

();:26

;

();

;26))((

();:25

;;'');(:24

;

;24

;23))((

();:23

;

();

;23))((

();:22

;

();

;22)'.'(

;21))((

();:21

;

();

;21))((

();:20

;

;18))((

;;'');(:19

;

19

;18))((

();:18

;

();

;18))((

();:17

;

();

;17)''||''(

;18))((

();:16

==

=

=

=

=

=

=

===

=

=

=

=

=

=

=

==

=

=

=

=

=

=

==

=

=

=

=

=

=

=

=−=+=

=

=

tokenvaluenumtokentypecungetchcace

break

stateelse

statecisdigitif

nextcharccace

break

failstateelse

statecisdigitif

nextcharccace

tokenvaluenumtokentypecungetchccace

break

stateelse

statecisdigitif

nextcharccace

break

failstateelse

statecisdigitif

nextcharccace

break

failstateelse

statecifelse

statecisdigitif

nextcharccace

break

failstateelse

statecisdigitif

nextcharccace

break

statecisdigitif

tokenvaluenumtokentypecungetchcace

break

state

statecisdigitif

nextcharccace

break

failstateelse

statecisdigitif

nextcharccace

break

failstateelse

stateccifelse

statecisdigitif

nextcharccace

w w w

. i t

9 8

. i r

Page 14: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

����������

���� ������

������������������������ �������������������������������������������������������������� ���������������������� �!� "#��$�%���������&

�����������������'�(��)��*���������� ���������������������������� �������� +,��$�+-���-��."/��������0���1���2+��)��+*���+�����)3�4

�������5���,�*-��������� ��6��#���������������6��7�8���'��*��4���������,� ��'�#��)3��5�������9:���4��;��

��

��

�������<����=�����>:������������������������-���%����8�������-�����-��� ?��������84����� ��@����A:�����������������!+���� ��

�6���4�$�����B%��>�����������4�����8����������-�����-������ �"��7�8������0���A:�6�"#�1����������6��C�)���D�����;��

��E4���������� �����*F,��� F����>:������������������������� G�H����*�� ��IBJ���4�4���-������� �����-�����-��� ?������;��

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

K������� ����

K�6(�����H���������2��)�����C�L������: =���M������C�L�������?�4������

K����4�� *�N>��H����O��5����6(���4�P�����<>→><��

K��������2�����A���

��

�����������

������,���,�����������)���������,���-� �������)3�����7����)���������������,�$���D�8������6?�!����������%����;��

��

��

��

��

��

��

���� ��)�������"��Q����'������$�**����NP� �57��������6F-;��

��

��

��

��

��

��

��

��

��

��

��

��

))(( xfxfi ==

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

),,,( PTNTSG

RuleProductionP

SetalTerT

SetTerminalNoneNT

symbolstartS

:

min:

:

:

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

����!��"#$���%�

��&������ �"#$�'()*

'���()*���� �����%�

+����!

*�,�-.�

�����/0� 1�2��!

w w w

. i t

9 8

. i r

Page 15: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

�������������������3

•�-��� �����8���������*F,���9�R4;��

• "����9�R4�������.,��$�-���:������8�����-�����8�����������������6��7�)��������7�.,����3�&����� !����:�

���� ��!�"������

K����,��D>��D���/�� �"��7������&$�**����������������-�����-���;��

K�$�**���>��D�����,��DSK���8���D����T��������,��D�UK�T������8���D������,��D�

•����������/����**�� �� 5,�����4� 5,�������8�����������-��8�C�%����$�**���>��D*���������������+���%�.+,���+�:��6+��7���-��8�����3��

����,��D�8����������� !��)���� �����������������������*-�����-����

•��"�H����8���D����T�������,��D������������ ��������+���+"�H� �����������������V�������"�H���:����� 5,�W�?�-�����4�$����X4�-

��W�?�-�� ��������Y����V�-���;

•�����,��D����8���D����T����4�4��"�H����0���8�����-��1����)��,����� 5,�4�$����X4�-����� ���� ������+H���� ����������������

���B%� ����� ,��� �,�&Z[� �,������;

•�*-���<�\����7�C� �!�����������%�$�**���>��D���;

��

���#�$��

��� ,��<�\��������������%���)������%���������%�)3�.,��$�-���:��)��������"�H�2��67��J������4���� ������� +,���W�?�+-�� ����4�����Z[�W�?�-�

'�(��)��*������������D�]"���;�"�H���:������������-� ���VJ^������>���V���������������%���

,��M\�������%�4��������H4�Z[�W�?�-�� ����4�;��-�<�\���_C�� !���� ��4�;��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

����→ ��������������������

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

��� 1E ���������� 2E ������� 1S ������� 2S �

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

����

��

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

1S

2S

2E

1E

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

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

1E

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

2S1S2E

����

w w w

. i t

9 8

. i r

Page 16: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

�������������������4

•M��������M�-�����-��� �����%� ,��M\�����/���`�)����M�*�����D�)3������� �\�������%�;��

��������������6F-����6�7��#9������%�<�\���_C���

��

•���2+����4�4��+,��D���� +,������������4�4��*F,����

,��8����

�%�!�&'�(��!�����%�)�&*����#���+�,�!��#�-�#�.�%/��

)1(LL�E4��8�����""L������$�����Z[� �,������4�4���-����� ,�� *5��8������'4���4�""L� �,�����,��D���� ,�� *5��8������<4��

�*�� ��$��9�,����7�?�-��8���Z[;��

���)3�)���D���� ,���8�����������-����4�4�����aM���� ��b�����

������D�������������� ,�����D�2��������a����4��������� �������7����'4�H�2��������8�*c���&���%� �����+�8��� "�������,�&�-��� ����NP�X

,������<�C�����,��D;��

��

��

��

��

��

��

��

��

��

��

��

��

��

�.%��+0��1�2)�)(αfirst��

�6��,���������P������8���/3first���$�-�d��������"�H�����6F-���� ,�� G���'�*��������P��)3��-� ��X4�-�)3������

�8���/3�����P�� ��,�����7x��

K��%�α�����D���-��}{)( αα =first��

K���%���������$�>3��*����:�����P��������)(xfirst��*���C�L��;

K�%�X���4��+���D��+�/�2�kYYYX �21→����+-����+:���2+��;�����+���+���P��4�)()(,)(,)( 321 nYfirstYfirstYfirstYfirst ��

6��-�� +*5���*+-������+���iY����+P�������+**���+�:����� +\��+*������+��X����+��� +��N+������+��8+�������+���+*���+�:�������+�

����P�)(Xfirst��-� ���C�L��;

K�%�X4�����D���/�2�kYYYX �21→�-����:���2��;����P��)( 1Yfirst0NH���ε�1����P����)(Xfirst�������C�L�;

K�%�X���4�����D���/�2�kYYYX �21→��-����:���2��;�4�ε��������P�)( 1Yfirst�-���01Y�������ε����+*���+�:�����1������+��8+�����

���$4^�)( 1Yfirst0NH���ε�1����P�)( 2Yfirst0NH���ε1�����N�)(Xfirst�������C�L�;

K�����:��$���7�����H����ki YYYYX ��21→��%��ε��)(,)(,)( 121 −iYfirstYfirstYfirst ��������P���-���)( iYfirst0���N+H��+�ε�1

����P����)(Xfirst�������C�L�;

X

Y

Z��$

�"#$�-.� ��M

……�� a + b $ ������

����!��"#$����������%�5

������

stmtunmelsestmtmthenexprifstmtunm

otherstmtmthenexprifstmtm

stmtunmstmtmstmt

___

|__

_|_

w w w

. i t

9 8

. i r

Page 17: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

�������������������6

3�4��$����>���V���������������%;��

��

��

��

��

��

��

'�(��;���-�a��*����:����������%�.,��������3�&a����� !��)����8����e����

ε|

|

SB

baBS

→��

f,�D�;���aaBS →→�4�},,{)(,},{)( baBfirstabsfirst ε==��

��

'�(�;���������%���first()��*�������������;��

����

caF

aFbaA

aFB

bBAaS

|

||

|

|

�����������������������������������������������������������f,�D�����������������������������������������������

},{)(

},{)(

},{)(

},{)(

basfirst

caffirst

baAfirst

aBfirst

=

=

=

= ε

��

��

'�(��;���������%���first()��*�������������;��

��

caF

aFbaA

aFB

BabBAaS

|

|||

|

||

ε

������������������������������������������������������������������������������������������������������f,�D

},{)(

},{)(

},,{)(

},{)(

basfirst

caffirst

baAfirst

aBfirst

=

=

=

=

ε

ε

��

��

idEF

TFT

TFT

ETE

ETE

|)()5

|*)4

)3

|)2

)1

′→′

′→

′+→′

′→

ε

ε

},({)(

},({)(

},{)(

},({)(

},*{)(

idEfirst

idTfirst

Efirst

idFfirst

Tfirst

=

=

+=′

=

=′

ε

ε

f,�Dw w

w .

i t 9

8 . i

r

Page 18: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

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

��

����������� �������������� ����(�)���

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

������������ ���������������������������������������������� ��!"#����$%#����������&�'(�)��

��

��

*��������%��(#���!��!��)(αfollow��

+� ,�α-symbolstart��.�/01#�!����2�3����4�)(αfollow!�������5�

+6��������!'��� ,�αAB →����7�8� ��.�/0#�--9������:����)(αfirst7�����ε���������)(Afollow����������;��5�

+�!'��� ,�6�������AB α→����7�8� ��.�/0#�--9������:����)(Bfollow����������)(Afollow����������;��5��

+6��������!'��� ,�βαBA →����7�8� ��.�/0#�-!�����:�������()(βfirst7�����ε���������)(Bfollow����������;��5��

+6��������!'��βαBA →�� )(βfirst�(�<�ε�����������7�8� ��.�/0#�!���)(Afollow����)(Bfollow����������;��5�

��=�5���������(����!� �>�?<����@�! � ��5��

��

��

� ���

��

��

��

��

�=�5���������(����!� �>�?<����@�! � ��5��

��

��

��

��

��

��

��

�=�5���������(����!� �>�?<����@�! � ��5��

��

��

��

��

��

}{)( aXfollowBXa =→→ γα

idEF

TFT

TFT

ETE

ETE

|)()5

|*)4

)3

|)2

)1

′→′

′→

′+→′

′→

ε

ε

}),$,,*{)(

}),$,,{)(

}),$,,{)(

}),${)(

}),${)(

+=

+=′

+=

=′

=

Ffollow

Tfollow

Tfollow

Efollow

Efollow

},({)(

},({)(

},{)(

},({)(

},*{)(

idEfirst

idTfirst

Efirst

idFfirst

Tfirst

=

=

+=′

=

=′

ε

ε

A��B

ε|)4

|)3

|)2

)1

dD

DbB

BSBaA

ABDS

}$,,,{)(

}$,,,{)(

},,${)(

},,${)(

dbaDfollow

dbaBfollow

dbAfollow

dbSfollow

=

=

=

=

},{)(

},{)(

},,{)(

},,{)(

ε

ε

dDfirst

dbBfirst

dbaAfirst

dbaSfirst

=

=

=

=

A��B

BcC

bB

SbCAaSbA

BCdS

|)4

|)3

||)2

|)1

ε

ε

ε

}d,a{)C(follow

}d,c,b,a{)B(follow

}a{)A(follow

,$}b{)S(follow

=

=

=

=

},b,c{)C(first

},b{)B(first

}d,c,b,{)A(first

}d,c,b,{)S(first

ε=

ε=

ε=

ε=

A��B

w w w

. i t

9 8

. i r

Page 19: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

S ���E %#����� � "3� �� ,,�(�F����(��C�� �� �D������E��+− ,,*����C������!C" �/�� CF0�������!:?C���C�� ����C���E�C��)(EFirst�

()(EFollow!���������5��

λ|*

*|

EF

FE

ES

+→

−+→

�A��B������,*}{)(

,*}{)(

−=

+=

Efollow

Efirst��

��

�������� �������!0��!0�5��

���������� ������!�"�!�#�$#%���

�!��E0�9GE����

���!0�H8��:I,3���!�����:5��

�!����.!�������%#��(�� ��H8�3��� �,��: ���5��

&'�()%*�!$� ��������)��

J+����#�H8��:I,3���$�G"!��)������αAA →��

��

K+�����������;�H8��:I,3���dBcAdB

cBA

||

|

→ α��� ��H8��:I,3���&"���������������������������������������;�αα AdBA →→��

+(,��!�&'�()%*�!�-.���

�0�0�*���0�8�������|||||||| 2121 nmAaAAA βββαα ��→��"��L����9������:���iβ�����A@�!�M���(�!0�I0�N( ��

3�iα�:?"�E0���ε3�����I��%�������!���,"���������H8��:I� ��<� "3�%�0�*�(���"7/��

εααα

βββ

||||

|||

21

21

AAAA

AAAA

m

n

′′′→′

′′′→

���

�=��5!� �OP<���� "3� �� ,��:I,3��5��

EdBcdEaEAcE ||||→��

�A��Bε|||

|

EdEaEAcE

EBcEdE

′′′→′

′′→��

+�&'�()%*�!�-.(��/���

����� �� ,!�����:��!0�%���?B��.!��*�5��

��������(��AA →+� �� ,�����!��E0��

9:"��/'���

��

��

��

��

��

��

��

��

doitojfor

dontoifor

)1(1

1

−=

=

������kjA αααα |||| 321 �→ ����� � βji AA → ������ ��������������� ������

βαβαβα kiA ||| 21 �→��

������ �iA!��"# ���$�%&'�����()�*+�,����-�.��

��

��

w w w

. i t

9 8

. i r

Page 20: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

�=��5!� �OP<� "3� �� ,�3�����H8��:I,3��5��

SdAcA

bAaS

|

|

→��

��:I,3���OP<��� ����;9"����H8bAaS

bdAadAcA

|

||

→��

����<9"��������#�H8��:I,3���OP<���

&'�0�)��1���

��

!�'���3�����(���*�!<�H8�������� ,������H8���: ��������� �� ,�Q"!����R :I�� S��Q"�%#�6��5�=�21 | ββ aaA →�������

H8���: ��α�@�/�����%�8�� �.��T:���&�"�B����U������� ���B����%������0���� �� ,�N�0�&"��3��� �!"��%���������(�����!�������

��*�&"��3��Q"�@�! �� �� �&��V��%������0�%� �W��B!0�������>�������������!�'���&�0�53��%�������U�����I��X����� ���: ���

�� ,5��

�9������:���� ,���� ��'�<����nnmaaaA δδδβββ ||||||| 121 ��→3��� �,���: ������.�/0#�α����H8���: ���%�������

����0�OP<� "3�6��������

��

��

�� ,��=�!" �/�� F0������� "3���

bE

aiEtSeSS

iEtSS

|��

��

�����������������9"����� �,���: ���3��YB��

��

��

!" �/�� F0������� "3� �� ,��=���

��

������(����< ��� �,���: ��� ������ �� �� �� �� ���

��

��

���< ��� �,���: ��@(���������

��2�3�4���56�7$����������)� �������

?"����"7���(!����(�(� �� ,!�����:������� "3�Z��[��:5��

+!��E0�9GE�� �� ,��

+!�����:��!0�H8��:I,3���

+!����.!�������%#��(��H8�3��� �,���: ��5�

��

ε||

|

AadAcA

AbdA

bAaS

′′→′

′→

m

n

A

AA

βββ

δδδα

|||

||||

21

21

→′

′→

bE

eSS

aSiEtSS

→′

′→

ε|

|

TabcdmabcdTabcdfabcEA ′→ |||

TdmdTdfEB

BabcA

′→′

′→

|||

TmTfZ

ZdEB

BabcA

′→′

′→′

′→

||

|

w w w

. i t

9 8

. i r

Page 21: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

�"7���(!�\��

+�����!V��(��Y" �����

+!������%�I0��������0�"�B� �D���� ]��

+!������%�I0��������0�"�B����%�:�5�

��

�������� "3�6�������^����B�(!�����I���� �9���

J+��������%�0�*� ���� ���α→A!� ��� ������ "3��<� ���

�����3�����)(αfirsta ∈.�������.!��*α→A�������_�],[ aAM9��������� *�5� ���

���� ,�)(αε first∈ ����3�����.�/0#)(AfollowB ∈��.!��*�.����α→A�_�������],[ bAM9��������� *�5� ���

����� ,�)(αε first∈�(�)($ Afollow∈���_�����.�/0#,$][AM��.!��*�.����ε→A9��������� *���5��

�=�5��

��

��

��

��

��

��

��

��

��

��

�=��5!�������I��^����B�(!�� "3� �� ,��� �5��

��

��

��

��

��

��

��

��

$id)(*+��

E1E1EEE

3E3EE2E ′��

E4E4EET

6E6E56T ′��

E8E7EEF

$ }�� { 0 id = ) ( for ; �

E E 3 E 1 E E E 2 1 S

E E E E 4 E 5 E E 5�� A

E E E E 6 E E E E 7 C

E E E E 8 E E E E�� E

E E E E 9 E E E E�� V

E E E 10 E 11 11 E E 11 X

E E E12 E E E E E�� B

E 14 13 E 13 E E E 13 13 L

idEF

TFT

TFT

ETE

ETE

|)()87

|*)65

)4

|)32

)1

→−

′→′−

′→

′+→′−

′→

ε

ε

}),$,,*{)(

}),$,,{)(

}),$,,{)(

}),${)(

}),${)(

+=

+=′

+=

=′

=

Ffollow

Tfollow

Tfollow

Efollow

Efollow

},({)(

},({)(

},{)(

},({)(

},*{)(

idEfirst

idTfirst

Efirst

idFfirst

Tfirst

=

=

+=′

=

=′

ε

ε

()

()

follow

first

}{;$);););;);{;$

{;{0{;

foridforid

foridididididforid

LBXVECAS

==

εεεε

εε

ε

ε

ε

|}14,13(

}{)12(

|0)11,10(

)9(

)8(

|)7,6(

|)5,4(

|);;(|;)3,2,1(

SLL

LB

VX

idXV

VE

EC

EVA

BSACAforAS

=→

w w w

. i t

9 8

. i r

Page 22: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

������������������� ��/

�������������2�3��)�0���$��������

+���(�(��:IB���G:0����2�!� ����;��5��

+���!:������� �!� �������!`�����L������:�����! �.�����5�

+��:IB����2�(�������!� ����;�����$����)�

+!:?�����& �����(�(��:���

+�:IB���-��� ���-����(���� �2������� *�5�

�:IB�Q"�&�M���(��"7���(!��3��.��T:�����U����"7�������%��������:<�����������@��0����&�"�B����557$�80�9� �$��!�0���:�0��

:�������������(�(��:�����G:0������!�2����7�0� �� ,�@ � ������� /"������3���� ,����.�(7��������"�������[�.!���%�I0��

�.� ���2� �,������ *��:IB��[������5���(�(����� �!������%�"�B������`��������0��3��"7�������2�������G���:IB����(�2��*��

!����.!0���5��

�(� �� ,�@ � ��%������ *�3��YB�2���(�(���������������� �9� �a �� ,��-�������.!0��[������Q"���(�(�3���:IB�����(�

��:IB��U��� S��!:T���b�T�������&���� "3�6U�<�!������

J+� ,�$== Xa����.!����%�"�B������`��������"7�������!�����

K+� ,�$≠= Xa�-!����X�3��!V�� S��(��������OP<��:IB��U���������.!0��[���(�(�3����

c+�� ,��X�(�!������� ��Q"xa ≠!�!���d����_0���][��

e+�� ,�X�0����@ ��Q"$��� �� �D�)���0 ��!���],[ �_�����aXM�����%������'�<�(�����&"�����! �����V�� ��(!������

f'��)UVWX 6����������.!��*→],[ ��0�[����aXM� S���'�<�&"�������������(�X��:IB�3�����(�.!�UVW(�������%

��:IB���� S����"��L�����������U� �,������ *��:IB��U������5��

>�)],[ ��0�[aXM!�!���d����_0���][�Q"��'�<�&"����������'�[�5��

5����;$�3�(��2���#�*��)�0���$�80�9��!�$0�"�!�8�<�/�3=��

��

��

��

��

��

��

��

��

��

��

��

��

��

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

��

/*/*$

;,,,

;

],[

/*/*

();

;

$

;

$;

21

111

21

emptyisstackXUntil

errorelse

end

YYYXproductiontheoutput

toponYwithstackthetoonYYYpush

stackthefromXpop

beginthenYYYXaXMif

lnonterminaisXelse

errorelse

ipAdvanceandstackthefromXpop

thenXif

thenorterminalaisXif

ipbytopointedsymboltheandsymbplstacktopthebeXlet

repeat

Wofsymbolfirstthetopointtoipset

k

kk

k

=

→=

=

α

α

w w w

. i t

9 8

. i r

Page 23: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

������������������� ��0

��

����>$#!���2�3�?� ididid *+57$�����@�#3�#�*�0���2�3�4����!���3��!?�A��<B9����=��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

�C6�*$�0.%��

�C6��

J+�:IB��U��!�����:��!0�g��]����V����(�(����(�!�����0�"�B���

K+���_���'(��0�"�B� �D��:IB��U],[ tokenXM�'�[�)(null!����5�

:�0�0��>�<��>�D��C6�EF9$�>$#!�:�0���)1(LL�0$������=��

GModepanic�

Glevelpharse��

��

�h(�����Modepanic����V�� ����� ���B� ,������C���C��!C ����OP<���(�(�3���!`0#�-!�������_0���][�Q"��"7���(!���'�[��0�[�Q"����

�������������@�����������������4���3����"ingsynchorniz���h(�����!� ��Modepanic�� �� ,�����0�"�B� �D� ����3��������C������Q"

ingsynchorniz������:� ,� F0������I��5���h(������� Modepanic�����C������iC����>�Cj:0���C���/:?��7�0ingsynchorniz�������5���&C"�

.!��.��T:���%�0�*����(�(���:IB��

� �$* ididid +����

ETE ′→� �$* ididid +��TE ′$� �

TFT ′→� �$* ididid +��FTE ′′$� �

idF →� �$* ididid +��idTE ′′$� �

� �$* idid+��TE ′′$� �

ε→′T� �$* idid+��E′$� �

ETE ′+→′� �$* idid+��+′TE$� �

� �$* idid��TE′$� �

TFT ′→� �$* idid��FTE ′′$� �

idF →� �$* idid��idTE ′′$� �

� �$* id��TE ′′$� �

TFT ′→′ *� �$* id��*$ FTE ′′� �

��$id��FTE ′′$� �

idF →��$id��idTE ′′$� �

��$��TE ′′$� �

ε→′T��$��E′$� �

ε→′E��$��$� �

w w w

. i t

9 8

. i r

Page 24: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

������������������� ��1

���!�����������[��� ������(�(�3�����"3���?*�OP<�%(!��!0��:���"7�������� �����>�j:0������0�,����!"����������5������i����>�j:0��Q"

follow ����������&:� ,� F0����������%�����������0�"�B� �D� ��ingsynchorniz��������0�"�B� �D�%#��5���&:� ,� F0�������(�&"���������C�����

follow����� ���G��ingsynchorniz����?�0���� ��5���� �/��6�������0 ������ :� �OP<�� �&"���� ���� :I����������0�%����������&C"���C������

�������%��������=��-�(7���������first����������7�0��������0�"�B� �Dingsynchorniz�(7����G0#�5��

�C6�*$�0.%�4�� $�5,���2�3��)�0���$��H7�3��

���

��

��

��

��

��

��

��

��

��

��

$);(}

();

();

;

;.

;

}

,,,

;

{

;&&],[

;//

;

}();

;

{

$;

//{

();

;][

$;][

;0

11

=

=

=

≠=

=

=

=

=

=++

=++

=

Tokenwhile

tokengettoken

else

tokengettoken

else

Xpop

stackinTNsignnotisXif

synchXifelse

YYYpush

Xpop

synchXNULLNoTtokenXMif

terminalnonaisXelse

Xpop

else

tokengettoken

Xpop

tokenXif

XorterminalaisXif

stacktheoftopisXdo

tokengettoken

symbolstarttosstack

tosstack

tos

kk �

w w w

. i t

9 8

. i r

Page 25: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

��

��

�������������������LL(1)�� ���

��

���������First()���Follow() ���������������������

��

��

��

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

��

��

��

� !"�����������������������!����LL(1)����#���

�������$��%�����%�&����'��(�����)������������������*+����&����,&�����&�,���������LL(1)�����#���

��

�������� ��������-.���

/0�1���2"���

/34���5�����678

/��������������������������34����,����!���"��

����$�!��������������������������������������LL(1)&���9��:����

��

�LL(1)�� ����������������������������

�,�����LL(1)�0�"�������$�;�<�=�� �,��������>��βα |→A�%������=�������?���%��%�������

��

@/�φαβ =)()( FirstFirst ���

A/�����B���C���8�����%�������D!��������

E/�����ε→α *F����:<���)(αε First∈���Gφβ =)()( AFollowFirst ��%����

��B#�H����nA ααα ||| 21 �→��������;�I#φαααα =)()()()( 321 nFirstFirstFirstFirst �������

��

��C����������������LL(1)�� ����

��

��

��

��������+φ≠= cceAFirstcdAFirst )()( ���

$tieba��

����1����2S��4����3,4����S ′����������5��E��

bE

S

eSS

aS

SiEtSS

→′

→′

′→

.5

.4

.3

.2

.1

ε

}{)(

,$}{)(

,$}{)(

}{)(

},{)(

},{)(

tEFollow

eSFollow

eSFollow

bEFirst

eSFirst

aiSFirst

=

=′

=

=

=′

=

ε

ceAcdAB

fAbA

BAS

|.5

|.4,3

|.2,1

�����������

w w w

. i t

9 8

. i r

Page 26: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

�����D!���&��.>��<�!=�����I���������;&���J��%�,&������%��Start Symbol�#��&�������

��

��

K�������������C�����L��M) �����'�#����

abbcde �,&�����D�:#&

��

��

��

��

��

��

��

��

��

K�����,� �>�������L����������9N<��>��� �'�%��OB<��1������

��

!�"#$Phars%�&��>��,���*N��0�"�(������5P�������C���&��#!N#�$�!�<�����%���;���&!�!���#�������Q�(���������'�R��:<�(�

&!%����S!�T�����αβγγα +�� AS*��

!�"#�����$Simple Phars%&������?����&��%���;���&!�!��0�=�(���&�����>������:<�β�>��;&�>�R��:<�(���

αβγγ� α �AS*��

�( )���$Handle%�&��>����N>�&!%������"����U#��&��>��� �'�%��(��OB<��1���&�����>��,��;&�>�R��:<Handle���Q�V� �

&���#�&!����D���������

�I�&�W��.��H�����&���������%������$!#�=�(���>����N>����X:Y���,����%�����;�$�34��N>��#�������Q����) ���(���%������$!#�=���

���X�=&�W��.��H �'�%��K�����>����N>�Z!B.��J��%�&�N#����,&������%��) ���[��������F�>��� �'�%��G�� ��&�������,���D�:#&��%��

��������) ����*8���\�( )�������#�������

��

��C����&����� �;��I�>&�) ���bccdef�����]P5�����������������!������&����

��

���

���������������������98����������bccdef����������D!�� �'�%��K�����>����N>��*�>!�������

��

��

��

c bccdef�

Bcd bBcdef

e bBef

bBCf�bBCf

�S

;��I�>&�) ���

S → aABe

A → Abc \ b

B → d S → aABe → aAde → aAbcde → abbcde��������������

abbcde����������������

aAbcd � �����������

aAde��������������������

aABe������������� ���

S

eC

cBcdB

bBCfS

|

bccdef

bBcdef

bBef

bBCf

S

*������+ ,�-�.���(�!�-��/�0��'�12��3���

w w w

. i t

9 8

. i r

Page 27: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

&!%����;&�^�>��,&������%��,���1I#��1��,&�����"���(������5��(�����_���K����&��1�#������5��,���`��>����9N<�J��%��&���%��,�

�,&���$�� &������=�������

��

4�!�+,��!�����������!�����5#�&��

��/�0�$shift�&�%�\��'�#���&�� ��!:N>FToken�,� �G��#!%����;&�&����=���5��,L���,&����(������#������handel�� �a���5��,L����&��

&!%���B���>����N>������5��,�����b<������=�������'�#��9N<�����:<��������������&��&!%�X:Y���������K�#�!=�������

��

2��3$Reduce��&�%��&��������������Q�(��$�,��������678�����>��K�#�!=�����B���>����N>����X:Y��������5��,����c��<��<!N��

� &�������=������>���!�7��$!#�=�34��N>����

.��!����"6$Accept&�%�������������������'"!��$������>����������0b<���

�78�� �$Error�&�%�#�!+������"������&����Y+��������;&�&�]�P5��,!T#�,�Y+�(���>��������

���%��`��>����98���������&id+id*id&!%����;��&�����������Z�>��������

��

��

��

��

��

��

��

��&��'�#��`��>����_��/&��&�&!���9B5��J!#��&�) �����

@/�����5��,����c��<�����<!N���0�������&�!��K����&�,������Nd����

�>��X:Y���K�#�!=��>����N>F;��I�>&�S�P�#���&�9B5�G��

A/�&!%�0��#��$��T��) �������#!#�=�S�P�#���)�����=��9B5��K�����

$!#�=�(�����)����>����N>����\�������,����c��<����,���<!N������

�%���X:Y�����5���) ���9+���������D�8�K��4/���!��) ����

��

��

��

��/�0��9: �!�-�!���8����;��0�12��3���

@/��/�0���8���12��3$Shift-Reduce conflict �&%�#�!�#��>�������� &����,����#����� ���0��#�������'�#��9N<����&��I����Nd��

���) ���9N<������

A/�8���2��3�12��3$Reduce-Reduce conflict &%�K����%���;&�^�>��9��=��UTD�(���&�) ���,����;�<�=�(�����)�������

�>��;&�&�e��9B5��J!#�

��

��

9N<

,&������5��

���'�#�idid+id*id$�f�

�) ��idE →��+id*id$�fid�

���'�#�+��+id*id$�fE�

���'�#�id��id*id$�fE+�

�) ��idE →��*id$�fE+id�

���'�#�**id$�fE+E�

���'�#�idid$�fE+E*�

�) ��idE →��$�fE+E* id�

�) ��EEE *→��$�fE+E*E�

�) ��EEE +→��$�fE+E�

Accept$�fE�

(1) E → E + E

(2) E → E * E

(3) E → ( E )

(4) E → id

���� -(�!�-�.���*������+ ,�-�.����-�<,���������������&

w w w

. i t

9 8

. i r

Page 28: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

� �

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

��

��

��_���`��>���LR�,� �����!ID��\�%������L������K�����`��>����,� �����!ID����>&�g���LR�#!%�������'����B4!����>&��>����&!+���

���^�����%������$�%�������������+�>��&�$�5��>�����5���1#�,����`��>����_�������D�8��&���

/SLR$Simple LR%

1LALR$Look Ahead LR%

1CLR$Cannonical%

�^������[��=����C���,����,� ��>����&!N#�;&�^�>��`��>����_���K������$�!��������!#����#���,� �$����LR�,���&�4���� ��*c��g�����

/��.��!��(=�,&������%��,�1�#�������&����������=��N�=�K����&�,&������%��\$�&!%�����"�h��LR�$��&����$�,&������%��$�����

� &����]�P5������

/��-�&R�!c������5��,�!�T�mmSXSXS �110�&!%����;&�&�$�5#��iS�RL�8�;�� &�$�5#���iX�,� ��#�������Q���� ��#�����

&��I���0��#��) ���;��I�>&�W5�����O��\&!%��"�����5���&�;��I�>&�(������#!%����9'������5�����,&����,� &�N#�\�>�������

/9: �!�-����0(�&L�8���,&������%��,����&�N#�Z�>�����;��������������#����>��;������������*c���N�=����#���K����,L���R

�������K��.�����,�.���*8��������������,�!�T������5�

/9: �!�-������H��N�=��&�9��%�)P��K��action���goto�>������N�=action�)P����&!%�0��#��������������*N<�goto�

�������]P5�����,�.���D�8

>,?�H�>L���� �>����K������,!T#�,� ��Y+�$b<���<�>���

@ #&�+�>��1���>��&�����*�+���>&�R�:>�T����8�� ��>����K�����������������

��>����W*�P��g���������9B%��&LR�>��;�%�;&�&�$�5#�� �����1#���Y��������

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

�9: �!�-�4�!LR

...$321 aaa

0

1

1

S

X

S

X

S

m

m

m

m

��

��

����������#��LR����+

RL�8 gotoAction

��5�w w w

. i t

9 8

. i r

Page 29: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��6�<,$1-item%�,���� LR(0)F�cb+��!i�����*=�G���������G����,�D!��G�Y'#�(�����F�I�&�j�+���b<���G>��&��#�B���&���>����N

����D!��K���������>��$XYZA →�������&���������*=���14����

A� � XYZ

A� X�YZ�

A� XY� Z

A� XYZ� �

����D!�ε→A���R�!c�����*=�(���1����→A�;&�&�$�5#�k�Tc�&�<�l���(������#�!������*=�(��\���N#������D!��������;��Nm%�&�<�K�D���\&!%

����m������m����"�����mY'#�(m���&�\�D!�����,���'���4�������N#����]P5���*=�����#��&�\���N#����]P5������Y'#���.=!��&�<�K���&����D!�

XYZ��������7��X�5����%��$��&���U�#������ ����$�5#� !"��*=�K�D�����C��,�����>��;�%�;��&��������&�,&�����&������*=�K���&����m &��m��$�5#��

������7��X�5����%��,&�����&����+����X�������7��X�5����%��(��$��&���U�#�����&���&����K������>��;�%�;��&YZ�����&�������

��

��5#Closure&���

����I�������,����0b=�����,���<!N���G�;�I#�\�%���Closure(I)����;�%�&�����0b=���<!N���I$!#�=��&����;&�^�>������>��������

@/��&�&!�!���*=�� ��������&I����Closure(I)&!%�����"�h�����

/����βB��α→A��&�Closure(I)����%���&!�!��γ→B�*=�;�I#���%����D!��(�����γ��B���&�b:=�����I�$�����%�:#�

����"�h�&&����������#�!�#�,�I�&�������*=�V� ����&!%������"�����������#�������$!#�=�K��Closure(I)&!%��"�h���

��C�����������������������!���I�����������������������R�!c�����*=�(��,���<!N����;�I#��%��Closure(I)�%�� �!+��n� �0b=���4�9��%���

��

��

��

��

o>�����

��

��

��

��

��

��

��

��������9N<�����R�!c�����>����(���D�8�0�����&��>���1��&!%��>���>����K����D�8�0�����&�����������������

/����S��%���������J��%���b<��0�"����,��;�<�=������SS →′�F$SS →′G�$��&���S ′���������>��������#�������Q�(����

�;&��"�����������9c�8�������\���������"�h�Faugmented grammar�G���!���

/�0�#����,������D�80S��&��������������������������������&�����0S�Op>���;&�&����=�Closure������������K���0S���������"�h��

]}.{[ EE →′

idEF

FFTT

TTEE

EE

|)(

|*

|

+→

→′

idF

EF

FT

FTT

TE

TEE

EE

.

).(

.

*.

.

.

.

+→

→′

�(�!�-��,?A�������>8��SLR

�� 0.SS →′w w w

. i t

9 8

. i r

Page 30: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

/������D�8��&��*���!i�����iS���0�"�����n� ������

{

{��

��

nnn xA

xA

βα

βα

.

. 111

������%�����%�&�F���$��&���x����%����#�������Q�������#������#�!������G�����&

���0�#����,������D�8�R�!c�K����&jS���\;&���&�����iS���,���:D�?>!��������[�4�������x������jS���Km����m����� !m"����������������9'����

�����b<��N ��&�������q������b<�����.����x�� &�������=�������.�h���&���>��;�%�9'��������:>�T������ ������K���������Op>���

����&jS����� &�������=�����8�0�����&��&��B#��4���#�����DkS�X��Y���'�=&�����%�����%�&�&!���jS��R�!c�K����&��%���jS�;�5#�&�����

���r!<��&��iS���[�4������,���:D�?>!��x������kS�����'#����0�=�K���\&&������9d������0����m�&����,������D�8��I�&���������������B�

&!5#��"�h��

��C���������>����������������D�8�0�����&���

)(ET

idT

TE

TEE

+→

����

�(������0�=��&�Start Symbol���#���$ES →�������D�8������������"�h��������������0S&���&������������m�����;�%���^��98������;

����������

)(ET

idT

TE

TEE

ES

+→

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

S�E$ ��

E�E+T

E�T ���

T�id���

T�(E) ��

S� E $�

E� E+T���

E� T

T� id

T� (E)��

E�E+T

E�T �� ��

T�id � ��

T�(E)���

S� E$

E� E+ T �

�T�id ��

T�(E) ��

E� E+ T

T� (E)��

E�E+T T� (E) �� �

E��

T��

id

0S

1S

2S

3S

4S

5S

6S

7S

�4S

�id3S

T2S

E

T8S

id3S

�4S

9S

6S

)

w w w

. i t

9 8

. i r

Page 31: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

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

idF

EF

T

TFT

TFT

E

ETE

ETE

→′

′→′

′→

→′

′+→′

′→

)6

)()7

)6

*)5

)4

)3

)2

)1

ε

ε

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��������

3S

7S

8S

9S

4S

�3S

E

10S

2S

�5S

4S

3S

���

5S

�12S

���

4S

Id

5S

13S

11S

S��E ��

E�� T E′

T��F T′ ��

F�� (E)���

F��id �����

S� E�

E� T � E′ �

E′ ��+T� E′ �

� E′ ��� �������

T� F� T′

T′ �� TF* ′

T′ ���

F� (�E)��

E�� T E′

T��F T′ ��

F�� (E)���

T��id �����

F�id� �����

E� T E′ �

E′ �+�T E′

T��F T′

F�� (E)

F��id

T� F T′ �

T′ � TF*. ′ �

F�� (E) �� �

F��id � ��

F� (E�)�

T′ � TF* . ′ �

T′ �� TF* ′

T′ ���

F� (E)��

0S

1S

�2S

4S

5S

E��T��

F

�Id

���

���

T��

����

Id��

F

E′��

T′��

F

T

Id

6S

F��

E′ �+T� E′ ��

� E′ ��+T E′ ��

E′ ��� ����

E′��E′ �+T E′ �

14S

�7S

T′�� T′ � .TF* ′

��� 9S

15S

w w w

. i t

9 8

. i r

Page 32: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

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

��

idF)6

)E(F)5

FT)4

F*TT)3

TE)2

TEE)1

EE

+→

→′

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��� ��������SLR���

������State������ ��������������

������ !�"����#$�%action&��������'�(�)*������������� �

�� !�"����#$�����%goto�&������������� ���������'��+�

��

��

w w w

. i t

9 8

. i r

Page 33: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

�������� �������action���goto������� ���!��"�#�$%�����

����a������� �����,�-������'�.�iS�������-�a��/�0-�0jS� ������-�]a,i[action�������� ��!�jS��

����� �iS1� #$�������'�"����0-��.A α→�02#�3��"�42�����'�"����0-�()A(Follow%�5�� b�&� �]b,i[action��������� ��!�

nR�06� #7�0-�n� #$���8 ��,�.A α→����

������ �����iS #$���.SS →′ ���,�-�0$,��� ��!�,$]i[action�����9�accept�� ��!��������

�:;-�<��6'�"��-goto������9����������06��=iS������'���+�.���-�%�5��A�&�����0-jS��� ���� ��]A,i[goto���������� ��!j�

��

��

����������� �� �<>!�0?@A���������0�B3'����C����

��

),$},{*,)F(Follow

),$},{*,)T(Follow

),$},{)E(Follow

+=

+=

+=

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

�����"��&�'(�)��'����*��+���� ��,SLR������� ��-�����"��.�� /��

�����������52���$-�$��������09�D��0$�E�0-�0������������������09�D��"�� ��0$, �"�F$���0-�� ����

GH�'0�1��2����nS]a,i[action =�"�� ���������$-��8��0�B3'�0����-�(�a�IJ����nK�-�0-�� ��6���<L$��0$�E�"���

MH3�'�2�����nR]a,i[action =�������8�,��9���8��N$���.���,�-���������-���:����,�-�0�n������#'�8�2�!�8 ��,�β→A���0O����-�(�,�-�

���0��>���8��0�B3'β������IE��������PQ��0$�E�"K�-����� ����PQ��β�0$�E�"K�-����������m���$-�8��0�B3'�0����-��,�-�A�(IJ����

� ���#C#����2]A,m[gotoPQ��"��-�0�����R���0$6��(�����09�D��0$�E�"K�-�0-�� �|| β������OS'�0O-�0$�OE�"K�-����|| β2���"K�O-���

0$�E����PQ��� ����#C�B��������8 ��,�.��0$�E� ����������R�-�����������

TH4�562����accept]a,i[action =����8�,���3�����L9#���-�"�� ��0$, �0�B3'��,�-�

UH'782����error]a,i[action =����8�,���-� ���L9#����2��-�"�� ��0$, �0�B3'��,�-���

gotoAction��

FTE$)(��*+id

321����4S�������5S��0S��

������Accept������6S����

1S��

������2R��2R����7S

2R����2S��

������4R��4R����

4R��4R����3S��

328����4S������

5S��4S��

��6R��6R����

6R��6R�����5S��39������

4S������5S��6S��

10��������4S������

5S��7S��

��������11S������

6S����8S��

������1R��1R����

7S��1R����9S��

������3R��3R����

3R��3R����10S��

������5R��5R����

5R��5R����11S��

w w w

. i t

9 8

. i r

Page 34: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

�'9 /�0�B3'����C����8��@$����-���� ��0$,id*id+id���0�B3'�� ���

��

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

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

!�0?@A�1�?�D#'�0-�0C#'��-�,#��<6,�R���0-�� �0$, �.��0�B3'��$� #N�����#'����<>���

0$6��V�"���������SLR�8�N�W��,�-�LALR���CLR� ��B������

����

��

��

��

��

��

gotoAction��

FTE$)(��*+id

321����4S�������5S��0S��

������Accept������6S����

1S��

������2R��2R����7S

2R����2S��

������4R��4R����

4R��4R����3S��

328����4S������

5S��4S��

��6R��6R����

6R��6R�����5S��

39������4S������

5S��6S��

10��������4S������

5S��7S��

��������11S������

6S����8S��

������1R��1R����

7S��1R����9S��

������3R��3R����

3R��3R����10S��

������5R��5R����

5R��5R����11S��

�C��/��"�� ��0$, ��0$�E

Shift5 id*id+id$0

idF →��*id+id$��0id5

FT →��*id+id$��0F3

Shift7��*id+id$��0T2

Shift5��id+id$��0T2*7��

idF →��+id$��0T2*7id5��

F*TT →��+id$��10F7*2T0

TE →��+id$��0T2

Shift6��+id$��0E1

Shift5��id$��0E1+6��

idF →��$��0E1+6id5

FT →��$��0E1+6F3

TEE +→��$��0E1+6T9��

Accept$��0E1

idF)6

)E(F)5

FT)4

F*TT)3

TE)2

TEE)1

EE

+→

→′

� ��������SLR� ���� ���������id*id+id

end//}

();error

else

return

Then)Accept]x,s(action[IFelse

})A,S(goto(Push

);A(Push

();pop

)||2to0i(For

)A:R]x,S[action(IFelse

();Tokennextx

);S(Push

);x(Push

)S]x,S[action(IF

){EOF(!while

i

i

j

ji

=

α=

α→=

=

=

w w w

. i t

9 8

. i r

Page 35: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

������������ ��� ������ �������������LR����

�������������������� ���������������������������� ��� ������������ ����!"�#$��"�%&�'�("���)� "� *�������������+����,��"�-��"�����-��.��-

������������������������/01���������� ���2��)��3������������-�!4�)�/5���� +����+������-��)�/5��������$.����!"��2��� �6�� ��"��%����+����� ��+7��

*� "� *� ��'�("�2�!"������/5����/�8"��"�������!"�9)��������:��3�����;�-�����;��<���=����%��

��� "� *�>�?�"� �2��2�-��� �

)E(|idF

F|F*TT

T|TEE

+→

��� "� *�����@�� �A�� B;�-��-��#� *��� *�'�-� C���&�������$D�3�#State�&�'�)��5�!"���3�-�����;

���������-��������������7E0)���'�7��'�-�$�����"C� ���-�����-� "� *�������2�'�("��� *��$D�3���=�����)�/5����!�- �������� ��#���9)�+����

��F���&'��� G�%��

idE

)E(E

E*EE

EEE

+→

�����

��

�� *���'�-�H��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��� *����������������3'�)�!"�/��8���-�������������=���IJ�-���2�'�-%��

��

��

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

E′ ��E

E��E+E

E��E*E

E��(E)

E��id

E′ �E�

E�E�+E

E�E�*E

0S1S

E� (�E)

E��E+E

E��E*E

E��(E)

E��id

E��

���

Id��

2S

E�id�

3S

E�E+�E

E��E+E

E��E*E

E��(E)

E��id

E� (E) ��

E�E*�E

E��E+E

E��E*E

E��(E)

E��id

+��

���

4S

5S

E� (E�)

E�E�+E

E�E�*E

Id��

���2S

�3S

E�� 6S

E�E+E�

E�E�+E

E�E�*E

7SE��

���2S

�Id��3S

E�E*E�

E�E�+E

E�E�*E

���2S

�3SId��

8S

)�� 9S

+��4S

���� 5S

E��

+��4S

���� 5S

+��4S

���� 5S

w w w

. i t

9 8

. i r

Page 36: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

/(<��IJ��� *�������������%��

)},*,{$,)E(Follow +=��

��

��

��

��

��

��

��

��

��

��

���/5�����;�5�-����-�����2�!"��B3K"shift/Reduce���$������L-���%���/+3�$������2�!"�������'�("� "� *����$1 �� ��;�$�����$��

�2�!"��������)� AM01�$��D�����/5���%��

��

������CLRH���

��

�����LR(1)�H��'����N�LR(1)N�����/�8�"�,� "�O���N���C'���LR(0);������1�0�"�N����!7���9����1�0�"���;�����#Lookahead�&���@$��

���:-�J������0="]LA,A[ .α→����1�0�"���!7���9����1�0�"�-�"�-� ����P��-��2�!"����9��0;�Follow�������$��-�$0���;����� �Q�C���'�+�

-�������)�%)A(FollowLA ⊆��

�������������� �� ��$����������R�?��CLR����$D�3��� *���'�7��'�-��-� C�$D�3��� *���$.����!"������CLR����7;�"�SLR�����$���C���>� +2�'��

>→′< {$},SS .�2���!"��

���-��.��S�����(��I"�'��-�AD����-�"�-����C�����)�'��LR(0)���-��.����F���'��-�AD����(2�-��.����2����R�?���C�����)�'��LR(1)������:�����������$���

��-�0;����=��!7���9����1�0�"�@�;�2�!"��F�?��-��.���1�0�"������������������.)� �Q���)�'��C��� �� ���:-�J��������������%��

)a(Firstb|}]b{,B[

}]a{,BA[

..

β∈δ→

βα→��

��T"�%�$D�3��� *��CLR��7��'�-��-� ��� "� *�%��

��

��

��

��

��

��

$�����2�'�-��� *����=���IJ%��

��

��

goto�action�state�E�$�)�(�*�+�id�1���

2S ���3S �0

�acc����5S �4S �1�

6���2S ���

3S �2�

�4R �4R ��

4R �4R ��3�

7���2S ���

3S �4�

8���2S ���

3S �5�

��9S ��

5S �4S ��6�

�1R �1R ��5S , 1R �4S , 1R ��7�

�2R �2R ��5S , 2R �4S , 2R ��8�

�3R �3R ��

3R �3R �9�

idF)5

FT)4

T*FT)3

TE)2

ETE)1

EE

+→

→′

w w w

. i t

9 8

. i r

Page 37: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

!"#���$%�&�'���CLR(1)H���

�������������U�-CLR(1)���$���!2�-���(2�-��.���������P��-�-����SLR(1)���$=�?��-��������-� *�����:�����������@�� *� ����I���� +F��+��!0��C�

}]b{,A[ .α→�����)��;�5�-�@'�2�����2��]b,i[action���-����α→AduceRe���!"�-� <�)���������+�����������������-� A��:-�(1����@'�

��1�0�"Follow�'�7��!"���������2�!7���9����1�0�"�����)�%��

��

��T"�%��7��/�0���!M(<���T"��� *����� ���-�����������%��

��

��

����

��

��

��

��

��

��

��

��

��

��

gotoactionstate

FTE$*+id��

321������4S��0S��

������ac������1S��

������2R����

5S����2S��

������4R��6S��4R����

3S��

������5R��5R��5R����

4S��

327������4S��5S��

38��������4S��6S��

������1R��������

7S��

������3R����

3R����8S��

E′ �� E , {$}

E �� T+E , {$}

E �� T , {$}

T �� F*T , {+,$}

T �� F , {+,$}

F ��id {*,+,$}

E�� E′ � E� , {$}

8S��

0S�� 1S��

E � T�+E , {$}

E � T� , {$}

2S��

T��

T � F�*T , {+,$}

T � F� , {+,$} F��

3S��

F �id� {*,+,$}

id

4S��

E � T+�E , {$}

E �� T+E , {$}

E �� T , {$}

T �� F*T , {+,$}

T �� F , {+,$}

F ��id {*,+,$}

+��

5S��

T � F*�T , {+,$}

T �� F*T , {+,$}

T �� F , {+,$}

F ��id {*,+,$}

*��

6S��

E��E � T+E� , {$}

7S��

T��

F��

id

2S��

3S��

4S��

T � F*T� , {+,$} T��

F��3S��

id4S��

w w w

. i t

9 8

. i r

Page 38: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��T"�%�$D�3��� *��CLR��7��'�-��-� ��� "� *�%��

dC)3

cCC)2

CCS)1

SS

→′

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��2�'�-��� *�������������%��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

gotoactionstate��CS$dc��

2��1����4S��3S��0S��

��ac������1S��

5����7S��6S��2S��

8����4S��3S��3S��

������3R��3R��4S��

����1R������

5S��

9����7S��6S��6S��

����3R������

7S��

������2R��2R��8S��

����2R������

9S��

{$},SS .→′

S�� CC {$}

C�� cC ,{c,d}

C�� d , {c,d}

{$},SS .→′

0S��

S S� C�C {$}

C�� cC ,{$}

C�� d , {$}

C�� 2S��

C�c� C ,{c,d}

C�� cC ,{c,d}

C�� d , {c,d}

c 3S��

C� d� , {c,d}

d4S��

S� CC� {$}

C

5S��

C� c�C ,{$}

C�� cC ,{$}

C�� d , {$}

c 6S��

C� d� , {$} 7S��

d��

C�c C� ,{c,d} C�� 8S��

cd

3S��4S��

cd

6S��7S��

C�� C� cC� ,{$}

9S��

1S

w w w

. i t

9 8

. i r

Page 39: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

������&�'����(����������LALRH���

��� *���'�-��� �LALR��� *���������@����� "� *�N��CLR ��'�-��-� "� *��%���-����VG���� *��CLR��� *��� ���/01������;����LALR �

��C�!"�$���%��

����� *���-������CLR�����)�'��C�9W�����'� *�!"�!4�)�$=�?����(;����LR(0)���;C�#��������.)��3KPJ�� C������Core���!+"�$=�+?��N+�����+7��*�&

��2��� �.���%�����!"���Q���;-��!;�.�����.)�����-�!4�)�$=�?���� *���-�VG����!7���9����1�0�"���'�7C����+�� +�B;��+�� �B;��-��)�$=�?��������)�'��

'�7��!"���Q��')��

��T"%��� *��������������CLR��IJ�39��� *���@�LALR��7��'�-��-��X�� "��%��

��X�� "��� *���-�����2�!"��B3K"3S����6S�@4S����7S���8S����9S�7�.)���Q��/��<�#�;-�� �.�����.)&��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

��

���� "� *� *�CLR���-���"���)�$=�?����Q�����V�����2���������������-�LALR�$+F *�����;� ����!"�����;������!M5������;� "� *���� +"� *��+��

LALR�$����%���� "� *� *����3CLR���������LALR��������������-���Q�����V��@�2�(;�LALR���9)���>�;�/5���� "� *�Y���@ ���)��5��� ��9)��

������-���Q�� Z��-���AE�)LALR��[�;��>�;�/5����\�"C��)��W;������9)��� "� *���;C� A"�CLR����+=P<�:-�+J��+���-�����2�����(;�')�

LALR$�����2��������;���Q�����/(<��=P<�/5����@!�D�3���7��-�!�-�(1����@$.�;�')��%����+��������+���+�����+[� XLALR����� *�+����-����

�����������U�-��7;�0)��7�1���2���Q�CLR$����%�������������;�0;�N�� ��71���LALR����)��5� ���:-�J����/(<���T"��%��

��

��

��

��

��

��

��

��

��

gotoactionstate

CS$dc

217,4S6,3S0

����acc����1

5����7,4S��6,3S��2

89����7,4S��6,3S��36

����3R��3R��3R��47

����1R������5

����2R��2R��2R��89

{$},SS .→′

S�� CC {$}

C�� cC ,{c,d}

C�� d , {c,d}

{$},SS .→′

0S��

S S� C�C {$}

C�� cC ,{$}

C�� d , {$}

C�� 2S��

c

C� d� , {c,d,$}

d7,4S��

S� CC� {$}

C

5S��

C� c�C ,{$,c,d}

C�� cC ,{ $,c,d }

C�� d , {$,c,d }

c

6,3S��

d��

C�c C� ,{c,d,$} C��

9,8S��d

6,3S��7,4S��

1S

c

7,4S��

w w w

. i t

9 8

. i r

Page 40: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

�����������������)�$=�?����=�SLR�����LALR�������[�<�� "� *� )�.����+��������+����)�$=�?����=�����D�$��� �CLR����,+�� "��+���+) "� *

�*-��������������SLR�����LALR�$����%���U�-�!4���,�1���7�LALR������$(.;�CLR��� +� ���-�+<�$+����+�0"��-���I;���)��P5����$�������

��7��]8��%���N��^�)���(D�������)��W;���[�;���-�(;��/5������-� C�_MQ������N����� ���-����V��U�-�����������%���-CLR���N+���+�� ���-����V��

���-�"�-����D�@�2��)��W;����;����;�9)���/01�!�3� A��@�P5�����SLR�����LALR���!F�+?��9)�+��/+01��+7���� ������V���P5�$�����0"�

�2�]8�%�`�.3��������CLR�� �=� ��$�%��

� "� *� *�CLR� "� *����$F *�����;� ����!"���C��2���LALRa$�����

������������-�� ��� �5LALR�/5����$�����0"�r-r'�2�����2��%��

�� "� *� *�SLR� "� *� C��2���CLR�')���LALR$�����

!*��E�����$1 ���.��["���

��

��

��

�)��*+ � !�%�Type checking��

��

���$,�-�$.��/���� ��� �"��-�/�MI��/01�8�"����;��!��7="%�b F���T"� ��71�����)�-� <�� �������������-��-�!J�5�$"K1������ M��G"��

����-C���7�cd'�-�� ���e(X��"�; ��-������ ��]� =��!�����������Int A[10]; A[i]=5

�-��["���7���-i� �"��-��-��["�����7��fW8"�����)��"�-� <��-�!�"K1� M��G"����������-��8�"�fW8"�� ��i�-�3�8�"����=��� �������

������-�$.��/���

c\��;�*� ��� �.��(Type checking)�H�-C�'�-��;������g�"�����-���'�7��S0�� ���%�;�M01�������) AM01�72�����2�� �.���%��

h\����;� ��� �.��#���;� ����3��H& ��]� =��������-���;�N�� ����0;��

i\� �� ��� �7��H�-�KT"swich�-�case������ Break�)��"�L-��P5��; *��'�2�����2���

j\���-�����)-��5���!�- ��H� ����-�KT"Ada�k�lW"���;�N���[M3� )�-���5��� ���

��

��For1(……)

For2(………..)

End for2

End for1

��

&�0 ���

� *�a���)�V��;�������=��N�����-C�>�;���� ��g�"�N��c���cd���I����I"����O-�5���P5��2���R�IJ��1�N�(sub scrip out of vong)�-����

�:�-���B:=A[i]��mI=11�-������"�����-�!M��$D�3�-a$���]8��/��<�����"�; �����_������!;��

c\����� ��� �"�/"�1�'�.���_��

h\��-������77��������_����/��G"��� �"�

i\!��7="���77��������_����/��G"��� �"�

j\n�F�:�-�������3��"�; ���5�_����� ��� �"�

`����H��7��*4� *��@$���$�-�]11[A:B =��2�!"�]8��!"��"� *�/�MI��_����/��G"����M3 "�-��P5���A;C����

������ ������CLR

LALR

SLR

w w w

. i t

9 8

. i r

Page 41: Compilers principles, techniques and Tools · 2018. 3. 15. · ’ ˇ& 1 & 8= ˇd1 Sˇ$%34 7ˇ $˙ back-end&>8 < ( %3 47ˇ!$ ˙ ˙1 2ˇ# front-end] S - ˆrsY˙ 942ˇ#91 ˘%4ˇq4SE

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

��#���9����;�8�"�fW8"�/��G"��� �"��-��)���;�� �%��

�&�$�a$���R�IJ�/��["�>�;� "� *�k�l5�-��)��7��*����N��������

��

c&� "� *LL(1)$.�;�@�SLR(1)��')$.�;��

h�&� "� *LL(1)�!D��$.�;�SLR(1)$.)���

i�&� "� *LL(1)���SLR(1)$�����

j�&� "� *LL(1)!D��$.)�SLR(1)$.�;���

`����%��7��*1���$�-�$��

��

��

��

��

�o7��-�������LL(1)�2��)��5� ���/�2����%��

��

��

��

��

��

����� "� *�V�LL(1)�K"�'�7��'�-��-� "� *�������������������� *��� *��@�$.�;�����2�!"��B3@�SLR(1)��')$.�;��

&�0 ��������+���+����+���� �������.��7���-�X��-� "� *�����7��fW8"��-�/�8"�$.�;�,��7"���77���A8���������������� �-���N���� �� ��� "� *�

����������������� "� *��� ���=������7��fW8"���77���A8��LL(1)����.���-�%��

��

��

��

!�8*����� "� *� *����C��2�����2��p��LL(1)a�;����$.)���

��� �� ��� �5LL(1)��p��!�8*�������2�(;�'�("������ ����%%�2�����2��;��

��#�1�-��$��-�!�8*������2���01�� C���-�p��� �*-����F����2�(;�'�("�� "� *� *���LL(1)��2�����2��$��-�!�8*����� "� *� *����$���

$�����0"LL(1)�����2����2�(;��

���;�H "� *� *�CLR��0�3��2�(;�LALR$.�;���;���

��

��

��

��

��

��

������

��2���eF�"��

CAS��

},c{ �},b{ �{a}First

{b}{c,b}�{$}Follow

$cba��

������1S

��32/3��A

��44��C

λ→−

λ→−

|cCC)43

|bA)32

aACbS)1

bc|bbcQ

Rbc|Caba|abaR

Qba|RaL

w w w

. i t

9 8

. i r