책소개
이 교재는 컴파일러를 효과적으로 구성하기 위한 모든 이론과 방법을 다룬다. 컴파일러의 기능은 논리적 단계로 어휘분석, 구문분석, 의미분석, 중간코드 생성, 코드최적화, 목적코드 생성 등 6단계로 나눌 수 있다. 본 교재는 이러한 논리적 단계를 그대로 따르며 서술하였다. 제1장의 기본개념 설명에 이어서, 제2장부터는 각각의 논리적 단계에 대해서 구체적으로 다루며 이들 단계에서 사용되는 각종 기법과 이론을 자세히 학습하게 된다. 본 교재에서 서술된 컴파일러 구성 이론이나 방법은 모두 예제와 함께 설명된다. 학 생들은 관련된 예제를 통하여 보다 쉽고 확실하게 이해하게 될 것이다. 그동안 강의를 하면서 질문이 많이 나오거나 학생들이 어렵다고 하는 내용은 개념을 다시 설명하거나 보충설명을 달았다. 또한 이해를 돕기 위하여 많은 개 념을 그림으로 시각화하였다. 교재에서 소개한 이론을 바탕으로 요즘은 컴파일러 구성을 쉽게 도와주는 소프트웨어가 개발되어 있다. 대표적인 어휘분석기 및 구문분석기 생성기 소프트웨어로 LEX와 YACC 등을 소개하였다. 이들은 모두 PC에서 실습이 가능한데 이러한 실습을 하게 되면 컴파일 러를 제작하는 능력을 갖출 수 있다.
저자소개
1985년부터 순천향대학교 컴퓨터 소프트웨어공학과 교수로 재직 중이다. 한국정보처리학회 회장, 순천향대학교 도서관장, 공과대학 학장, 전산정보교육원 원장 등을 역임했다. 고려대학교에서 프로그래밍 언어 설계 및 병렬 컴파일러 개발 분야의 박사 학위를 취득하고, 미국 일리노이대학교 어버너-섐페인의 슈퍼컴퓨터센터, 콜로라도대학교 덴버 캠퍼스의 컴퓨터학과, 고려대학교에서 객원교수를 지냈다. 현재 순천향대학교 웰니스코칭서비스연구센터장, (사)한국 정보인협회 회장, 한국정보처리학회 컴퓨터소프트웨어연구회 위원장, SCIE 저널인 Human-centric Computing and Information Sciences(HCIS)의 Advisory Editor, Scopus 저널인 Journal of Information Processing Systems(JIPS)의 Executive Editors, 그리고 50여 개의 International Conference에서 Honorary Chair 및 General Chair로 활발하게 활동함으로써 국내외 컴퓨터 분야의 발전에 노력하고 있다.
관심 연구 분야는 병렬 컴파일러, 병렬 처리, 프로그래밍 언어, 이산수학, 데이터 마이닝, 웰니스 컴퓨팅이다. 주요 저서로는 『내공 있는 프로그래머로 길러주는 컴파일러의 이해』(한빛아카데미, 2016), 『빅데이터 컴퓨팅 기술』(한빛아카데미, 2014), 『컴파일러구성』(한국방송통신대학교, 2010), 『이산수학 이해』(정익사, 2010), 『이산 구조론(개정판)』(정익사, 1997) 등이 있다. 또한, C 프로그래밍, 이산수학, 프로그래밍 언어론, 형식 언어와 오토마타, 컴파일러 등을 강의하고 있다.
목차
제1장 컴파일러의 개요
1.1. 컴파일러의 필요성
1.2. 컴파일러와 인터프리터
1.3. 컴파일러의 논리적 구조
1.4. 컴파일러의 물리적 구조
1.5. 간단한 컴파일러의 예
제2장 형식언어와 오토마타
2.1. 형식언어의 기초
2.2. 형식문법
2.3. 문법의 표기법
2.4. 정규언어와 유한 오토마타
제3장 어휘분석
3.1. 어휘분석이란?
3.2. 어휘분석기의 설계
3.3. 어휘분석기 구현에서의 고려사항
3.4. 어휘분석기 생성기인 LEX
3.5. Flex
제4장 ContextFree 언어와 문법의 효율화
4.1. ContextFree 언어와 푸시다운 오토마타
4.2. 유도트리
4.3. 모호성
4.4. 불필요한 생성규칙의 제거
4.5. ε-생성규칙의 제거
4.6. 단일 생성규칙의 제거
4.7. Backtracking과 Leftfactoring
4.8. Leftrecursion의 제거
4.9. 푸시다운 오토마타
제5장 구문분석
5.1. 구문분석의 종류
5.2. Bottomup 구문분석
5.3. Topdown 구문분석
5.4. YACC
5.5. Bison
제6장 의미분석과 기호표
6.1. 의미분석 개요
6.2. 기호표
6.3. 기호표의 구성
6.4. 상수정의와 의미분석
제7장 중간언어와 중간코드 생성
7.1. 중간언어의 개념과 종류
7.2. 구문지시적 변환
7.3. 중간코드 생성
제8장 코드최적화
8.1. 코드최적화의 개념
8.2. 실행시간을 짧게 하기 위한 최적화
8.3. 소요 기억용량의 최적화
8.4. 최적화의 구현
제9장 목적코드 생성
9.1. 목적코드 생성의 개요
9.2. 산술식의 목적코드 생성
9.3. 논리식의 목적코드 생성