Preface


1986년 출시된 책임.

Programming Languages는 새로운 복잡한 문제와 함께 진화해왔다.

오래된 코드 최적화 기술은 외부컴파일러에서 사용되는 것을 발견했다.

그것은 SW에서 debugging Tools 에서 사용된다. 그리고 코드에 존재하는 보안취약점을 찾는데 사용한다.

그리고 grammars, regular expressions, parsers, and syntax-directed translators 같은 Front-end 기술은 여전히 널리 사용된다.


대부분의 사람들은 컴파일러를 만들거나 심지어 유지하는 사람이 없다.

하지만 Copiler와 관련된 models, theory, algorithms 이러한 기술들은 SW설계와 SW개발을 돕는다.

이 공부는 source language, target machine 같은 곳에서의 language processor를 설계하는 곳에서 마주하는 문제들을 돕는다.


Use of the Book


이 책의 중요부분을 제대로 다루려면 최소 2분기, 혹은 2학기는 필요함.

이 책의 절반은 stressing code optimization 이다. 그리고 이것은 학부생 과정에서 배운다.

그리고 나머지 절반은 졸업생 혹은 mezzanine level에서 배운다.


Chpater 1

computer architecture 이슈와 Programming language 원칙의 배경을 배움.


Chapter 2

작은 컴파일러를 개발함. 중요한 개념을 소개하고 나중 챕터에서 자세하게 배운다.


Chapter 3

lexical analysis, regular expressions, finite-state machines, scanner-generator tools 를 배움.

이것들은 문자 처리에 대한 정렬의 근본임.


Chapter 4

major parsing methods(recursive-descent, LL), rop-down and bottom-up(LR and its variants) 배움.


Chapter 5

syntax-directed definitions, syntax-directed translations에 대한 원리들을 소개함.


Chapter 6

Chapter 5의 이론을 보여주고 대표적인 Programming language에서는 어떻게 사용해서 중간코드를 생성하는지에 대해서 보여줌.


Chapter 7

run-time environments, run-time stack 관리, garbage collection에 대해서 배움.


Chapter 8

object-code 생성임. 

object-code는 

 basic blocks의 구성,

 expressions로부터 코드 생성, 

 basick blocks, 

 register-allocation 기술들을 배움.


Chapter 9

코드 최적화 기술을 소개함.

code optimization (flow graphs, data-flow frameworks, iterative algorithms for solving these frameworks)\


Chapter 10

instruction-level optimization을 소개함.

instruction을 작은 순서로 병행처리하는 것과

single processors를 한번에 여러개를 사용할 수 있는 스케줄링.


Chapter 11

larger-scale 병렬 감지와 착취를 말하고 

여기서 고차원배열에 대해서 많은 반복믄을 가지는 numeric codes를 배움.


Chapter 12

interprocedural analysis.

pointer analysis, aliasing, data-flow analysis 

procedure 호출 순서 고려에 대해서 배움.


이 책을 사용한 아래의 과정은 콜롬비아, 하버드, 스탠포드에서 배움.


콜롬비아에서는 앞의 8개 챕터를 1년 과정으로 배우고 이 책의 가장 핵심 과정은 semester-long project인데 학생들이 프로젝트를 작업하려고 작은 팀 단위로 나뉘어져서 그들의 방식으로 작은 언어를 구현한다. 학생들이 만든 언어는 양자계산, music synthesis, 컴퓨터 그래픽스, 게임, matrix operations 등 다양한 분야의 앱이 있다. 학생들은 컴파일러를 만들기 위해 compiler-component generators를 사용하고 챕터2,5에서 배우는 syntax-directed translation 기술을 사용한다. follow-on graduate 과정은 Chapters 9~12에 관점을 둠. 이러한 과정은 code generation, optimization, multiprocessor architectures를 가지고 있음.


스탠포드는... 내가 알거 없으니까 생략하도록 한다.


Prerequistes


The reader should possess some "computer-science sophistication"

데이터 구조, 이산수학, 그리고 프로그래밍 좀 할줄 알아야 함.

이 책에서 이러한 지식들은 유용하게 사용 될 거임.



Exercise


이 책은 거의 모든 section에 연습문제가 있음. 연습 문제는 옆에 이상한 모양 딸려 있을거임.

가정 어려운 문제는 이상한 모양 2개 딸려 있음.


Gradiance On-Line Homeworks


더 많은 정보 얻으려면 www.aw.com/gradiance를 접속하거나 computing@aw.com에 이메일 보내라고 한다.

그런데 오래되서 잘 모르겠다. 그리고 이거 말고 나머지 내용은 생략한다.

방문하라길래 방문해봤는데 사이트 연결안됨.


Support on the World Wide Web


이 책의 홈페이지는 dragonbook.stanford.edu 이다.

이 홈페이지도 접속안됨.

그래서 걍 다 생략함.


Acknowledgements


감사인사 글인거 같음. 그래서 생략함.















'Compilers(Principles,Techniques,&Tools)' 카테고리의 다른 글

채워야할 부분.  (0) 2019.02.03
Compilers 공부 시작  (0) 2019.02.02

+ Recent posts