<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=ProgrammingLanguageClass%2FReport2002_1</id>
	<title>ProgrammingLanguageClass/Report2002 1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=ProgrammingLanguageClass%2FReport2002_1"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=ProgrammingLanguageClass/Report2002_1&amp;action=history"/>
	<updated>2026-05-15T05:57:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=ProgrammingLanguageClass/Report2002_1&amp;diff=37609&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:24, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=ProgrammingLanguageClass/Report2002_1&amp;diff=37609&amp;oldid=prev"/>
		<updated>2021-02-07T05:24:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Principles of Programming Languages =&lt;br /&gt;
HW #1 3/27/2002&lt;br /&gt;
&lt;br /&gt;
== &amp;lt; 문    제 &amp;gt; ==&lt;br /&gt;
※ 입력된 문장들이 제시된 문법(grammar)에 맞는지 판단하는 Recursive Descent Parsing 기법을 이용한 파서(parser)를 작성하시오.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt; 일    정 &amp;gt; ==&lt;br /&gt;
* 제출일: 4월 10일(A반) &lt;br /&gt;
* 데모 날짜: 4월 10일(A반)&lt;br /&gt;
* 제출물&lt;br /&gt;
** Internal/external documentations&lt;br /&gt;
** 프로그램 소스코드 및 실행파일이 든 디스켓&lt;br /&gt;
&lt;br /&gt;
== &amp;lt; 문    법 &amp;gt; ==&lt;br /&gt;
 &amp;amp;lt;start&amp;amp;gt;              → &amp;amp;lt;statements&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;statements&amp;amp;gt;       → &amp;amp;lt;statement&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;statement&amp;amp;gt; &amp;amp;lt;semi_colon&amp;amp;gt; &amp;amp;lt;statements&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;statement&amp;amp;gt; → &amp;amp;lt;identifier&amp;amp;gt; &amp;amp;lt;assignment_operator&amp;amp;gt; &amp;amp;lt;expression&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;expression&amp;amp;gt; → &amp;amp;lt;term&amp;amp;gt; &amp;amp;lt;plus_operator&amp;amp;gt; &amp;amp;lt;expression&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;term&amp;amp;gt; &amp;amp;lt;minus_operator&amp;amp;gt; &amp;amp;lt;expression&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;term&amp;amp;gt;             &lt;br /&gt;
 &amp;amp;lt;term&amp;amp;gt;              → &amp;amp;lt;factor&amp;amp;gt; &amp;amp;lt;star_operator&amp;amp;gt; &amp;amp;lt;term&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;factor&amp;amp;gt; &amp;amp;lt;slash_operator&amp;amp;gt; &amp;amp;lt;term&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;factor&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;factor&amp;amp;gt;     → &amp;amp;lt;left_parenthesis&amp;amp;gt; &amp;amp;lt;expression&amp;amp;gt; &amp;amp;lt;right_parenthesis&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;identifier&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;constant&amp;amp;gt;&lt;br /&gt;
               |  &amp;amp;lt;identifier&amp;amp;gt;&amp;amp;lt;condition&amp;amp;gt;&amp;amp;lt;identifier&amp;amp;gt;&amp;amp;lt;question_operator&amp;amp;gt;&amp;amp;lt;compare_value&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;condition&amp;amp;gt;  → &amp;amp;lt;less_keyword&amp;amp;gt; | &amp;amp;lt;greater_keyword&amp;amp;gt; | &amp;amp;lt;equal_keyword&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;compare_value&amp;amp;gt;    → &amp;amp;lt;identifier&amp;amp;gt; &amp;amp;lt;colon&amp;amp;gt; &amp;amp;lt;identifier&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;constant&amp;amp;gt;  → any decimal numbers&lt;br /&gt;
 &amp;amp;lt;identifier&amp;amp;gt; → any names conforming C identifier&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;question_operator&amp;amp;gt; → ?&lt;br /&gt;
 &amp;amp;lt;less_keyword&amp;amp;gt;        → &amp;amp;lt;&lt;br /&gt;
 &amp;amp;lt;greater_keyword&amp;amp;gt;  → &amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;equal_keyword&amp;amp;gt;    → ==&lt;br /&gt;
 &amp;amp;lt;colon&amp;amp;gt;        → :&lt;br /&gt;
 &amp;amp;lt;assignment_operator&amp;amp;gt; → =&lt;br /&gt;
 &amp;amp;lt;semi_colon&amp;amp;gt;       → ;&lt;br /&gt;
 &amp;amp;lt;plus_operator&amp;amp;gt;     → +&lt;br /&gt;
 &amp;amp;lt;minus_operator&amp;amp;gt;   → -&lt;br /&gt;
 &amp;amp;lt;star_operator&amp;amp;gt;     → *&lt;br /&gt;
 &amp;amp;lt;slash_operator&amp;amp;gt;    → /&lt;br /&gt;
 &amp;amp;lt;left_parenthesis&amp;amp;gt; → (&lt;br /&gt;
 &amp;amp;lt;right_parenthesis&amp;amp;gt; → )&lt;br /&gt;
&lt;br /&gt;
== &amp;lt; 세부 사항 &amp;gt; ==&lt;br /&gt;
* 입력: INPUT.TXT로 이름지어진 텍스트 파일&lt;br /&gt;
* 출력: 주어진 문법에 따라 INPUT.TXT에 저장되어 있는 문장을 분석한다. 파싱(parsing)되는 중간과정을 &amp;lt;처리 예&amp;gt;와 같이 출력하고, 문법에 적합하면 “Yes,” 입력된 문장이 적합하지 않으면 오류 메시지와 “No”를 출력한다.&lt;br /&gt;
* 처리 조건&lt;br /&gt;
** 각 파싱(parsing) 함수는 리턴하기 직전에 해당 non-terminal이 검색되었음을 알리는 메시지를 출력하여야 한다.&lt;br /&gt;
       예)     void expression(void) {&lt;br /&gt;
 &lt;br /&gt;
                       ...&lt;br /&gt;
 &lt;br /&gt;
                       printf(&amp;quot;&amp;amp;lt;expression&amp;amp;gt; parsed.\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
               }&lt;br /&gt;
** &amp;amp;lt;identifier&amp;amp;gt;와 &amp;amp;lt;constant&amp;amp;gt;의 경우에는 찾아진 lexeme을 함께 출력한다.&lt;br /&gt;
       예)     void identifier(void) {&lt;br /&gt;
 &lt;br /&gt;
                       ...&lt;br /&gt;
 &lt;br /&gt;
                       printf(&amp;quot;&amp;amp;lt;identifier&amp;amp;gt;: %s parsed.\n&amp;quot;,token_string);&lt;br /&gt;
 &lt;br /&gt;
               }&lt;br /&gt;
** 입력 스트림에서 ASCII 코드로 32 이하인 것은 모든 white-space로 간주하며, white-space는 각 token을 구별하는 용도 이외에는 모두 무시한다.&lt;br /&gt;
** 어휘분석기(lexical analyzer)의 소스코드는 정수 변수 next_token, 문자열 변수 token_string, 함수 lexical()을 포함하여야 한다. 함수 lexical()은 입력 스트림을 분석하여 하나의 lexeme을 찾아낸 뒤, 그것의 token type을 next_token에 대입하고, lexeme 문자열을 token_string에 저장하는 함수이다.&lt;br /&gt;
** 문장이 문법에 적합하지 않으면 관련 오류 메시지를 출력한다. 그 다음 오류를 발생시킨 lexeme을 제거 또는 첨가한 후, 파싱을 재개한다. 예를 들어, x = a + + b일 경우, “+” 연산자가 한 개가 더 존재하므로 오류 메시지를 출력한다. 그 다음, “+”기호를 제거한 후 파싱을 계속한다.&lt;br /&gt;
** 기타 구현 시 요구되는 세부 사항은 직접 결정하고, internal document에 기술한다.&lt;br /&gt;
** 데모 시 디스켓에 실행파일을 미리 준비한다(데모 시에 컴파일하는 경우는 감점처리함).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt; 처리 예 &amp;gt; ==&lt;br /&gt;
* 입력: target = operand1 + operand2 * 428 &lt;br /&gt;
* 출력 &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: target parsed. &lt;br /&gt;
       &amp;amp;lt;assignment_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: operand1 parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;plus_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: operand2 parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;star_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;constant&amp;amp;gt;: 428 parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;expression&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;expression&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statement&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statements&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;start&amp;amp;gt; parsed. &lt;br /&gt;
       Yes!! &lt;br /&gt;
 &lt;br /&gt;
* 입력: target = operand1 + + operand2 &lt;br /&gt;
* 출력 &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: target parsed. &lt;br /&gt;
       &amp;amp;lt;assignment_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: operand1 parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;plus_operator&amp;amp;gt; parsed. &lt;br /&gt;
       ERROR : plus-operator &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: operand2 parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;expression&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;expression&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statement&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statements&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;start&amp;amp;gt; parsed. &lt;br /&gt;
       No!! &lt;br /&gt;
&lt;br /&gt;
* 입력: target = op1 &amp;gt; op2 ? op3 : op4 * op5 &lt;br /&gt;
* 출력 &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: target parsed. &lt;br /&gt;
       &amp;amp;lt;assignment_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op1 parsed. &lt;br /&gt;
       &amp;amp;lt;greater_keyword&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;condition&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op2 parsed. &lt;br /&gt;
       &amp;amp;lt;question_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op3 parsed. &lt;br /&gt;
       &amp;amp;lt;colon&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op4 parsed &lt;br /&gt;
       &amp;amp;lt;compare_value&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;star_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op5 parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;expression&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statement&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statements&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;start&amp;amp;gt; parsed. &lt;br /&gt;
       YES!! &lt;br /&gt;
* 입력: target = op1 &amp;gt; op2 ? op3 &lt;br /&gt;
* 출력 &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: target parsed. &lt;br /&gt;
       &amp;amp;lt;assignment_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op1 parsed. &lt;br /&gt;
       &amp;amp;lt;greater_keyword&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;condition&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op2 parsed. &lt;br /&gt;
       &amp;amp;lt;question_operator&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;identifier&amp;amp;gt;: op3 parsed. &lt;br /&gt;
       ERROR : colon &lt;br /&gt;
       &amp;amp;lt;compare_value&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;factor&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;term&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;expression&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statement&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;statements&amp;amp;gt; parsed. &lt;br /&gt;
       &amp;amp;lt;start&amp;amp;gt; parsed. &lt;br /&gt;
       NO!! &lt;br /&gt;
----&lt;br /&gt;
[[ProgrammingLanguageClass]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>