메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

컴파일러 구조와 원리

한빛미디어

번역서

판매중

  • 저자 : 아오키 미네로우
  • 번역 : 이영희
  • 출간 : 2010-09-06
  • 페이지 : 616 쪽
  • ISBN : 9788979147681
  • 물류코드 :1768
초급 초중급 중급 중고급 고급
4점 (1명)
좋아요 : 31

컴파일러, 어셈블러, 링커, 하드웨어, 런타임 환경 등의 언어 처리 시스템의 동작원리를 해부한다.

C 언어를 축소한 C♭ 언어를 통해 컴파일러 구현 원리를 이해한다. C♭ 컴파일러를 중심으로 프로그래밍 언어의 실행 환경이 어떻게 구현되어 있는지 설명한다. 컴파일러, 어셈블러, 링커, 하드웨어, 런타임 환경에 대해 이해할 수 있다.

  • 어휘 해석
  • JavaCC로 파서를 작성
  • 구문 해석
  • x86 아키텍처
  • x86 어셈블러 프로그래밍
  • 함수 호출과 변수
  • 식과 문의 컴파일
  • 스택 프레임 할당
  • 최적화 방법
  • 오브젝트 파일의 생성
  • 링크와 라이브러리
  • 프로그램의 로드
  • 위치독립코드의 생성
저자

아오키 미네로우

문과계열을 전공한 소프트웨어 엔지니어. 주요 저서로는 『Ruby 소스 코드 완전 해설』 『Linux 프로그래밍』이 있다.
http://i.loveruby.net/

역자

이영희

현재 노틸러스효성 주식회사 금융솔루션사업 본부의 부장으로 재직 중이며, 다년간 일본 히다찌 및 관련 계열사와의 SI프로젝트 및 패기지 개발에 주력하였다. 최근에는 효율적인 프로젝트 관리 및 품질 관리에 초점을 두고 국제 품질 인증 심사의 하나인 CMMI기반의 사내 품질경영시스템을 구축하고 있으며, 그와 관련 사내 제안 및 계약 프로세스의 표준화를 위해 활동하고 있다.

1 컴파일러를 만들어 보자
1.1 이 책의 개요 
1.2 컴파일 과정
1.3 C♭ 컴파일러로 컴파일하기
 
2 C♭과 cbc
2.1 C♭ 언어의 개요 
2.2 C♭ 컴파일러 cbc의 구성
 
 
1부 소스 코드 해석
3 구문 해석의 개요
3.1 구문 해석 방법  
3.2 파서 제너레이터  
3.3 JavaCC의 개요
 
4 어휘 해석
4.1 JavaCC에 의한 스캐너 작성
4.2 구조가 없는 단어의 스캔
4.3 토큰을 생성하지 않는 단어의 스캔
4.4 구조를 포함한 단어의 스캔  
 
5 JavaCC로 파서 작성하기
5.1 EBNF로 문법 작성하기  
5.2 애매한 문법과 토큰 미리 보기
 
6 구문 해석
6.1 정의의 해석
6.2 문장의 해석
6.3 식의 해석  
6.4 항의 해석  
 
 
2부 추상 구문 트리와 중간 표현
7 JavaCC의 Action과 추상 구문 트리
7.1 JavaCC의 액션
7.2 추상 구문 트리와 노드
 
8 추상 구문 트리 작성
8.1 식의 추상 구문 트리  
8.2 문장의 추상 구문 트리
8.3 선언의 추상 구문 트리
8.4 cbc 파서의 실행  
 
9 의미 해석(1) 참조 해결
9.1 의미 해석의 개요
9.2 변수 참조의 해결
9.3 타입 참조의 해결
 
10 의미 해석(2) 정적 타입 체크
10.1 타입 정의 체크  
10.2 식의 타당성 체크
10.3 정적 타입 체크 
 
11 중간 표현의 변환
11.1 cbc의 중간 표현  
11.2 IRGenerator 클래스의 개요  
11.3 제어 구조의 변환
11.4 부작용이 없는 식의 변환
11.5 좌변값의 변환
11.6 부작용이 있는 식의 변환
 
 
3부 어셈블리 코드의 생성
12 x86 아키텍처의 개요
12.1 컴퓨터 구조
12.2 x86계 CPU의 역사  
12.3 IA-32의 개요  
12.4 데이터 표현과 배치
 
13 x86 어셈블러 프로그래밍
13.1 GNU 어셈블러에 의한 프로그래밍
13.2 GNU 어셈블러의 문법
13.3 전송 명령  
13.4 산술 연산 명령  
13.5 비트 연산 명령  
13.6 연산의 제어
 
14 함수 호출과 변수
14.1 호출 규약  
14.2 Linux/x86에서의 함수 호출
14.3 Linux/x86에서 함수 호출의 상세
 
15 식과 문의 컴파일
15.1 컴파일 결과 확인
15.2 x86 어셈블리의 오브젝트 표현과 DSL
15.3 cbc의 x86 어셈블리 DSL  
15.4 CodeGenerator 클래스의 개요
15.5 단순한 식의 컴파일
15.6 2항 연산의 컴파일
15.7 변수 참조와 대입
15.8 점프문의 컴파일  
 
16 스택 프레임 할당
16.1 머신 스택의 실행
16.2 인수와 로컬 변수의 메모리 참조 할당  
16.3 가상 스택으로 임시 변수 할당
16.4 머신 스택 액세스의 오프셋 조정  
16.5 프롤로그·에필로그의 생성
16.6 alloca의 구축  
 
17 최적화 방법
17.1 최적화의 의미
17.2 최적화의 분류  
17.3 cbc에서의 최적화
17.4 더욱 강력한 최적화
 
 
4부 링크와 로드
18 오브젝트 파일의 생성
18.1 ELF 파일의 구조
18.2 ELF 파일에서의 글로벌 변수 표현
18.3 글로벌 변수의 컴파일  
18.4 오브젝트 파일의 생성  
 
19 링크와 라이브러리
19.1 링크의 개요
19.2 링크  
19.3 다이내믹 링크와 스태틱 링크
19.4 라이브러리의 작성
 
20 프로그램의 로드
20.1 ELF 세그먼트의 로드
20.2 다이내믹 링크의 과정  
20.3 동적 로드  
20.4 GNU ld에 의한 링크  
 
21 위치 독립 코드의 생성
21.1 위치 독립 코드  
21.2 글로벌 변수 참조의 구축
21.2 링커 호출의 구축
21.3 프로그램 해석부터 실행까지  
 
22 이 책을 모두 읽고 나서
22.1 서적 소개  
22.2 링크·로드에 대해
22.3 다양한 언어 기능
 
부록
A.1 참고 문헌  
A.2 온라인 도큐먼트  
A.3 소스 코드  
찾아보기

  • 전반적인 느낌: 무엇보다도 번역이 매끄럽고 읽기가 편한 필체입니다. 컴파일러라는 어렵고 방대한 분야를 다룸에 있어서, 책에서 제시하고자 하는 내용의 범위를 명확하게 제시하고, 가능한 한 독자에게 어렵게 느끼지 않도록 차근차근 따라오게 하려는 저자의 의도가 반영되어 있습니다.

    책의 내용: 이 책에서는 컴파일 과정을 크게 4단계(구문해석 -> 의미해석 -> 중간표현의 생성 -> 코드 생성)로 구분하고 이를 중심으로 설명합니다. 원론적인 내용보다는 Cb언어를 제안하고, 이 언어의 코드를 예시로 실제 컴파일러의 구축에 필요한 내용설명에 중점을 두고 있습니다. 여기서 Cb언어란 C언어의 축소판입니다. 새로운 언어를 정의하는 것보다 기존의 언어에서 해석하는데 모호한 부분을 제거한 언어를 정의해서 그 언어에 적합한 컴파일러를 구축하는 과정을 책에서 제시하고 있습니다.

    물론 C언의 축소판인 Cb언어의 컴파일러 구축을 위해서는 C언어를 잘 알아야 합니다. 그리고 컴파일러는 Java로 구현하므로 Java언어도 잘 알고 있어야 합니다. 리눅스 관련 지식은 따로 없으셔도 될 듯 합니다.

    가장 기억에 남는 부분은 "12장. x86 아키텍처의 개요"입니다. 이 장에서는 기초적인 개념을 위주로 컴퓨터 구조에 대해 설명합니다. CPU의 개발역사와 x86이란 무엇인지부터 시작하여 CPU에 대하여 다루고, 메모리 부분에서는 C언어 포인터와 연계하여 메모리 관련 설명을 합니다. AMD64 명칭의 유래, 다양한 레지스터의 종류. C언어의 분기 등의 문법적인 요소의 처리과정. 수치값과 데이터형의 저장 방식을 다룹니다. 예전에 구조체 타입의 변수는 크기가 4바이트의 배수 단위로 할당된다거나 4바이트 수치값이 메모리상에서 1바이트씩 꺼내서 보면 반대로 저장되어 있는 경우에 리틀엔디안, 빅엔디안 차이라고 막연히 알고 있었는데 이번기회에 예전에 가졌던 의문점들이 많이 해소되기도 했습니다.

    문자열 분석의 마법사인 정규표현을 간략하게 하기 위해 정규표현식을 이해하기 복잡하게 구성할 수도 있습니다. 그러나 간단한 규칙부터 시작해서 처리못하는 문제점을 짚어가며 수정, 확장해 나갑니다. 살을 붙여 설명하는 방식이 눈에 정말 좋은것 같습니다.
    책의 구성: 다른 책들에 비해 목차가 상당히 상세하다고 할 수 있습니다. 책의 시작부분에서 전체적으로 본문에서 다룰 내용은 무엇인지, 이해를 돕기 위한 주변 지식으로 어떤 사항들이 필요로 하지만 해당 영역들을 실제로는 이 책에서는 다루지 않는다고 친절하게(!) 언급합니다.

    컴파일러 구축에 관한 주제를 여러 개의 소주제로 나눈 여러장으로 구성하고, 각 장은 다수개의 절을 포함하고 있습니다. 장과 절의 시작부분에 한 문장씩을 할애하여 이장에서는 어떤 내용을 다루는지, 이절에서는 어떤 내용을 다루는지 명시하고 있습니다. 마지막 부분에서는 다음장에서 다룰 내용을 언급하기도 합니다. 학습하는 입장에서 또는 참고 서적으로 활용하는 관점에서 볼때 한 장을 다 읽기 전에 원하는 내용을 미리 알수가 있어서 필요한 정보를 빨리 습득하는데에(?) 많은 도움이 될 것 같습니다.

    한가지 특이한 점은 22장에서는 추가적인 지식습득을 위한 참고서적에 대해 다루고 있다는 것입이다. 컴파일러, 구문해석, 어셈블러, 링크와 로드, 예외, 가비지 컬렉션, 함수형 언어 등등. 대부분이 원서이거나 출판된지 상당한 시간이 지난 서적들이어서 직접 구하는 것은 쉽지 않겠지만, 그 목록을 별도의 챕터로 제공한다는 점에서 상당한 의미가 있다고 생각합니다.

    좋은점:
    이 책에서 다른 컴파일러 책들과 달리 가장 유용하다고 느끼는 부분은 어셈블러 문법을 다룬다는 점입니다. 또한 MASM과 GNU as의 차이점도 짚어주고 있습니다. 어셈블러의 문법은 처음보는 독자에게는 생소하고 어렵게 느껴질테지만 저자는 좌절하지 않도록 다양한 명령들에 대한 의미와 함께 자세하게 설명해줍니다. gcc의 -S 옵션 설명을 시작으로 소스파일이 실행파일로 변환되는 과정을 살펴보고 각 단계에서 일어나는 일들을 설명합니다(C언어의 어셈블러 언어로의 출력, 이 어셈블리 언어의 GNU 어셈블러로 어셈블처리, 생성된 오브젝트 파일의 링크로 실행가능한 파일 생성). 이 책에서 구현하는 cbc(Cb언어의 컴파일러)도 이 사상을 모방하고 있다고 합니다.

    아쉬운점:
    일명 드래곤 북이라 불리던 컴파일러에서 다루던 오토마타 관련 내용은 자세히 언급하지 않습니다. JavaCC 자체에 대한 설명은 다루고 있지 않습니다.

부록/예제소스
자료명 등록일 다운로드
DOWNLOAD 예제소스 2016-04-14 다운로드
결재하기
• 문화비 소득공제 가능
• 배송료 : 0원배송료란?

배송료 안내

  • 책, 아이템 등 상품을 3만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
컴파일러 구조와 원리
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
컴파일러 구조와 원리
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
컴파일러 구조와 원리
구입처*
구입일*
부가기호*
부가기호 안내

* 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

* 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실