U E D R , A S I H C RSS

Programming Language Class/Report2002_1

Principles of Programming Languages

HW #1 3/27/2002

< 문 >

�������들 문�(grammar)�� 맞는�� ���는 Recursive Descent Parsing ��� �� ��(parser)를 �.

< >

  • �: 4�� 10�(A�)
  • 데모 �: 4�� 10�(A�)

    • Internal/external documentations
    • �램 ������������ �����

< 문 � >

~cpp 
<start>              → <statements>
<statements>       → <statement>
              |  <statement> <semi_colon> <statements>
<statement> → <identifier> <assignment_operator> <expression>
<expression> → <term> <plus_operator> <expression>
              |  <term> <minus_operator> <expression>
              |  <term>             
<term>              → <factor> <star_operator> <term>
              |  <factor> <slash_operator> <term>
              |  <factor>
<factor>     → <left_parenthesis> <expression> <right_parenthesis>
              |  <identifier>
              |  <constant>
              |  <identifier><condition><identifier><question_operator><compare_value>
<condition>  → <less_keyword> | <greater_keyword> | <equal_keyword>
<compare_value>    → <identifier> <colon> <identifier>
<constant>  → any decimal numbers
<identifier> → any names conforming C identifier

<question_operator> → ?
<less_keyword>        → <
<greater_keyword>  → >
<equal_keyword>    → ==
<colon>        → :
<assignment_operator> → =
<semi_colon>       → ;
<plus_operator>     → +
<minus_operator>   → -
<star_operator>     → *
<slash_operator>    → /
<left_parenthesis> → (
<right_parenthesis> → )

< �부 ��� >

  • ����: INPUT.TXT� ������ ������ ��
  • �: ���� 문��� 따�� INPUT.TXT�� ����� ��는 문���. ���(parsing)��� <�>�� ��, 문��� 면 �Yes,� ��������� �면 ������ �No��.
  • ����
    • �� ���(parsing) 는 리�� ���� ��� non-terminal������� �리는 메��를 ���.

~cpp 
      �)     void expression(void) {

                      ...

                      printf("<expression> parsed.\n");

              }
  • <identifier>�� <constant> ������는 �� lexeme �.

~cpp 
      �)     void identifier(void) {

                      ...

                      printf("<identifier>: %s parsed.\n",token_string);

              }
  • �������림�� ASCII ��� 32 ��� 모� white-space� ��며, white-space는 �� token ������ ����는 모�� 무�.
  • ����(lexical analyzer) ������� next_token, 문���� 변 token_string, lexical() �����. lexical()�������림�� lexeme ��낸 뒤, �� token type next_token�� 대��, lexeme 문���� token_string�� �����.
  • ��� 문��� �� �면 �������를 �. � ���를 ��� lexeme �� ��는 ���� , �� ���. �를 들��, x = a + + b����, �+� �������� �� 더 ����므� ����를 �. � ��, �+����를 �� �� ���.
  • ���� �� ������부 ���� ��, internal document�� ���.
  • 데모 ������ ���� 미리 ����(데모 �� ��������는 ���).

< � >

  • ����: target = operand1 + operand2 * 428


~cpp 
      <identifier>: target parsed. 
      <assignment_operator> parsed. 
      <identifier>: operand1 parsed. 
      <factor> parsed. 
      <term> parsed. 
      <plus_operator> parsed. 
      <identifier>: operand2 parsed. 
      <factor> parsed. 
      <star_operator> parsed. 
      <constant>: 428 parsed. 
      <factor> parsed. 
      <term> parsed. 
      <term> parsed. 
      <expression> parsed. 
      <expression> parsed. 
      <statement> parsed. 
      <statements> parsed. 
      <start> parsed. 
      Yes!! 

  • ����: target = operand1 + + operand2


~cpp 
      <identifier>: target parsed. 
      <assignment_operator> parsed. 
      <identifier>: operand1 parsed. 
      <factor> parsed. 
      <term> parsed. 
      <plus_operator> parsed. 
      ERROR : plus-operator 
      <identifier>: operand2 parsed. 
      <factor> parsed. 
      <term> parsed. 
      <expression> parsed. 
      <expression> parsed. 
      <statement> parsed. 
      <statements> parsed. 
      <start> parsed. 
      No!! 

  • ����: target = op1 > op2 ? op3 : op4 * op5


~cpp 
      <identifier>: target parsed. 
      <assignment_operator> parsed. 
      <identifier>: op1 parsed. 
      <greater_keyword> parsed. 
      <condition> parsed. 
      <identifier>: op2 parsed. 
      <question_operator> parsed. 
      <identifier>: op3 parsed. 
      <colon> parsed. 
      <identifier>: op4 parsed 
      <compare_value> parsed. 
      <factor> parsed. 
      <star_operator> parsed. 
      <identifier>: op5 parsed. 
      <factor> parsed. 
      <term> parsed. 
      <term> parsed. 
      <expression> parsed. 
      <statement> parsed. 
      <statements> parsed. 
      <start> parsed. 
      YES!! 
  • ����: target = op1 > op2 ? op3


~cpp 
      <identifier>: target parsed. 
      <assignment_operator> parsed. 
      <identifier>: op1 parsed. 
      <greater_keyword> parsed. 
      <condition> parsed. 
      <identifier>: op2 parsed. 
      <question_operator> parsed. 
      <identifier>: op3 parsed. 
      ERROR : colon 
      <compare_value> parsed. 
      <factor> parsed. 
      <term> parsed. 
      <expression> parsed. 
      <statement> parsed. 
      <statements> parsed. 
      <start> parsed. 
      NO!! 

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:03
Processing time 0.0156 sec