교과목번호 CA23606  교과목명 컴파일러 학점
(설계인정학점)
 3.0
(1.0)
이수구분  전공선택
개설학과 정보.컴퓨터공학전공 개설학년  3  개설학기 2학기
교과목책임교수 권혁철 연구실(전화) C26-407 (2218) E-mail hckwon@pusan.ac.kr
과목구분 공학소양   MSC 공학주제

수업방식시간(%)

강의 실험(실습) 발표 기타
     O  3( 70 )  ( ) ( ) ( 30 )  
선수과목및 지식  C 프로그래밍, C++ 프로그래밍, 프로그래밍언어론
교과목개요 컴파일러의 전체 구성을 이해하고 컴파일러의 각 과정에서 원시 프로그램이 변환되는 과정을 학습한다. 프로그램 컴파일을 위한 기본 이론과, 컴파일러 구현을 위한 실제적 기법, 번역을 지원하기 위한 각종 분석기 생성 도구의 기초적인 사용법을 익힌다. 
교과목목표 1 컴퓨터 관련 수학적 지식을 응용할 수 있다.
2 제한된 조건 아래에서 문제를 모형화하고 해결할 수 있다.
3 프로그램 개발 도구를 활용할 수 있다.
4
5
프로그램교육목표와교과목목표의연관성 No 프로그램 교육목표 관련 교과목목표
1 수학 및 기초공학에 대한 지식을 이해하고, 이를 공학적 문제에 응용할 수 있는 능력 개발 1 
2 컴퓨터공학 핵심지식을 이해하고, 실세계 컴퓨터공학 문제들의 자료를 분석하여 평가할 수 있는 능력 배양 2 
3 컴퓨터시스템을 설계할 수 있는 능력과, 도구 및 프로그래밍 언어를 활용하여 실세계에 존재하는 공학적 문제들을 해결할 수 있는 능력 배양 3 
4 자신의 생각을 효율적으로 전달하고 동료들과 협업을 할 수 있으며, 경영마인드를 갖춘 국제적 리더쉽 배양
5  
프로그램학습성과교육방법평가방법(반영률) No 학습성과 교육방법 평가방법 반영률(%)
 3 설계분석능력 - 이론 강의
- Term Project 수행
- 시험 평가
- 과제 평가
  40
 4 문제해결능력 - 이론 강의
- 주교재와 연습 문제 해결 과제 수행
- Term Project 수행
- 시험 평가
- 과제 평가
 40
 5 공학도구사용 - Yacc과 Lex를 이용하는 과제 수행 - 과제 평가  20
 
   
담당교수  권혁철   연구실(전화)   C26-407 (2218)    E-mail    hckwon@pusan.ac.kr
상담시간   분반   059 
강의시간   월 14:30(75),수 14:30(75)  강의실   A06-6515  실험실   
교재 및참고도서 주교재  A.V.Aho, R.Sethi, J.D.Ullman, Compilers: Principles, Tehniques, and Tools (2nd Edition), Addison-Wesley, 2007.
부교재  A.W.Appel, Modern Compiler Implementation in Java, Cambridge, 1998.
 
 
지정도서
관련Web http://borame.cs.pusan.ac.kr/borame.html
학습평가방법 출석태도 중간고사 기말고사 과제물 퀴즈 발표 보고서 기타
 5  15  15  40   5   10   10   100% 
정당한 사유가 없이 중간 및 기말시험 결시인 경우 학점 취득 불가. 정당한 사유가 없이 과제물 3회 이상 미제출시 학점 취득 불가.
주별 계획
  강의 내용 실험 및 과제 내용
제1주 강의소개 설계 목표 설명(1)
- 설계 대상 응용 프로그램 간략히 소개
- 관련 분야의 동향과 기술 설명
- 컴파일러 구조와 컴파일 단계 소개
 
제2주 어휘분석기 설계 기법, 정규표현 설계 목표 설명(2)
- 컴파일러 구현을 위한 도구 소개: Yacc, Lex
- 컴파일러에 적용되어야 하는 자료구조와 알고리즘 소개
 
제3주 유한 오토마타(FA: finite automata) 정규표현 및 FA 관련 연습문제 
제4주 문맥 무관 문법(CFG: context-free grammar) 설계 방향 결정 
제5주 구문분석 개요 CFG 관련 연습문제 
제6주 LL parsing 개요 문제 정의 (Term Project 제안서 제출)
- 컴파일러의 사용목적, 응용분야 정의
- 해결할 문제 제기
 
제7주 LR parsing 개요 평가 결과 발표, 설계 문서 평가와 질의응답 시간 (1시간) 
제8주 중간고사  
제9주 SLR, LALR parsing table 구성 시스템 설계 수정과 구현 시작 
제10주 구문 분석기 생성기 yacc 구현과정 중간발표
- 현재까지 개발된 컴파일러 발표와 평가
평가
- 해결할 문제, 사용할 도구와 환경을 구체적으로 제시
- 시스템 설계도 구현할 내용을 구체적으로 제시
- 설계내용 발표 및 평가
 
제11주 AST 설계 및 구성 컴파일러 개발 
제12주 Abstract Stack Machine 컴파일러 개발 
제13주 코드 생성 컴파일러 개발 
제14주 코드 최적화 컴파일러 개발 
제15주

기말고사

설계 시스템 발표와 최종 평가 
Term Project 수행

1) 목적: 수업 시간에 배운 관련 지식을 활용하여 컴파일러를 설계하고 구현할 수 있는 능력을 배양한다. 설계 대상은 간단한 소스 프로그램을 컴파일 하는 정도로 한다.

2) 사용도구: C, C++, Yacc, Lex 등을 통합적으로 이용한다.

3) 설계 제한 요소:
- 다음과 같은 3가지 방법에서 하나를 선택하여 구현한다.
1. C나 C++로 구현.
2. Parsing까지는 C나 C++, 그 이후는 Yacc
3. Lexical Analysis만 C나 C++, 나머지는 Yacc
- 소스 프로그램은 사칙연산, if문, while문을 포함하여야 한다.
- 소스 프로그램에 대한 명시적인 중간 코드를 생성하여야 한다.
- 중간 코드를 향상시켜서 더 빠른 실행 코드를 생성시시키는 코드 최적화 단계가 있어야 한다.
- 최종적으로 일반적으로 재배치 가능한 기계 코드나 어셈블리 코드로 이루어진 목적 코드를 생성하여야 한다.

4) 수행일정
4-1) 2주차
: 각자 자기가 컴파일 하려고 하는 소스 프로그램을 제시한다.
4-2) 6주차
: 각자가 제시한 소스 프로그램을 바탕으로 예상되는 결과를 작성한다.
: 소스 프로그램으로부터 생성될거라고 예상되는 중간 코드, 코드 최적화 단계, 목적 코드가 이에 해당한다.
: 컴파일러 구현을 위해 사용되는 자료구조와 알고리즘을 작성한다.
4-3) 7주차
: 제출한 제안서를 바탕으로 잘한 점, 잘못한 점, 해결해야 할 점을 수강학생 전체에게 개괄적으로 설명한다.
: 개별 학생에 대한 내용은 제출한 보고서에 표시하고, 전체 학생에게는 설명하지 않는다.
4-4) 10주차
: 설계한 내용을 발표하게 한다.
: 컴파일 하고자 하는 소스 프로그램, 컴파일러 구현에 사용되는 자료구조와 알고리즘, 각 컴파일 단계마다 생성될 거라고 예상되는 결과물, 시스템 구성(설계)정도를 10분 발표에 5분 질문으로 진행할 수 있게 하며, 발표 내용은 Powerpoint나 동등한 프리젠테이션 도구를 활용하게 한다.
4-5) 15주차
: 구현한 내용을 발표하게 한다.
: 발표는 컴파일러 소개, 시연, 다른 컴파일러와 비교한 장점, 개선할 점을 10분 발표에 5분 시연 형태로 진행한다.

5) 평가기준
5-1) 평가비중: 과제물, 보고서, 발표를 포함하여 총 60%
5-2) 평가물: 컴파일러 및 구현 설명 문서
5-3) 과제물, 보고서와 발표에 포함할 사항
: 컴파일러 구조 및 컴파일 단계
: 형태소 분석기, 구문 분석기, 의미 분석기, 중간 코드 생성기, 코드 최적화기, 코드 생성기
: 소스 프로그램과 컴파일 단계 마다 생성되는 결과물
: 설계 문서
5-4) 평가 주의점
: Automata 이론에 대한 이해도
: 컴파일 단계에 대한 이해도
: 심벌 테이블 운용과 오류 제어에 대한 이해도
: 실제로 수행 가능한 시스템 구현 능력 보유
: 설계 문서의 명확성
: 발표 태도 및 발표자료의 준비성

2007년 2학기 교수계획표