책 소개
요약
현대 소프트웨어는 하드웨어의 성능 발전에 힘입어 많은 부분에서 추성화된 덕택에 코딩에 입문하기도 쉬워졌고 원하는 프로그램을 만들기도 쉬워졌다. 하지만 컴퓨터를 더 잘 이해하고 싶고 프로그래밍을 더 잘 하고 싶은 사람들에게는 불투명한 벽이 생긴 셈이다. 이 책은 그 어떤 다른 도구나 라이브러리를 사용하지 않고 인터프리터, 컴파일러, 가상머신을 직접 구현해 보며 추상화라는 벽 뒤에서 실제로 일어나고 있는 일들을 이해할 수 있도록 돕는다.
이 책에서 다루는 내용
◆ 소스 코드 문자열 분석 방법
◆ 소스 코드의 구조 분석 방법
◆ 인터프리터 구현 방법
◆ 컴파일러 구현 방법
◆ 가상머신 구현 방법
◆ 가비지 컬렉터 구현 방법
◆ 어셈블리로 배우는 컴퓨터의 동작 방식
이 책의 대상 독자
◆ 컴퓨터를 더 잘 알고 싶고 프로그래밍을 더 잘하고 싶은 사람
◆ 인터프리터, 컴파일러, 가상머신을 만들어보고 싶은 사람
◆ 나만의 프로그래밍 언어를 만들어보고 싶은 사람
이 책의 구성
◆ 1장: 이 책을 학습하는 데 필요한 내용을 다룬다.
◆ 2장: 소스 코드의 문자열을 분석하는 방법을 다룬다.
◆ 3장: 소스 코드의 구조를 분석하는 방법을 다룬다.
◆ 4장: 소스 코드를 실행하는 인터프리터의 구현 방법을 다룬다.
◆ 5장: 목적 코드를 생성하는 방법을 다룬다.
◆ 6장: 목적 코드를 실행하는 가상 머신의 구현 방법을 다룬다. 또한 동적 메모리를 관리하기 위해 마크 앤 스윕이라는 가비지 컬렉터도 간단하게 구현해본다.
◆ 부록: 어셈블리를 통해 컴퓨터의 동작 방식을 알아본다. CPU의 레지스터와 메모리를 직접 조작해 계산해보고 함수도 호출해본다.
◆ 자료: 이 책은 온전히 동작하는 예제 코드를 제공한다. 2장부터 6장까지 각 장에서 다루는 어휘 분석기, 구문 분석기, 인터프리터, 코드 생성기, 가상 머신 프로젝트를 제공한다.
목차
목차
- 1장. 시작하며
- 1.1 프로그래밍 언어
- 1.2 컴파일러
- 1.3 예제 컴파일러
- 1.4 마치며
- 2장. 어휘 분석
- 2.1 어휘와 토큰
- 2.2 어휘 분석기
- 2.2.1 소스 코드 문자열
- 2.2.2 어휘의 시작 문자
- 2.2.3 숫자 리터럴의 시작 문자
- 2.2.4 문자열 리터럴의 시작 문자
- 2.2.5 식별자와 키워드의 시작 문자
- 2.2.6 연산자와 구분자의 시작 문자
- 2.2.7 숫자 리터럴 어휘
- 2.2.8 문자열 리터럴 어휘
- 2.2.9 식별자와 키워드 어휘
- 2.2.10 연산자와 구분자 어휘
- 2.3 마치며
- 3장. 구문 분석
- 3.1 구문 트리와 노드
- 3.2 문 분석기
- 3.2.1 선언 영역
- 3.2.2 함수의 정의
- 3.2.3 본문
- 3.2.4 변수의 선언
- 3.2.5 본문의 식
- 3.2.6 식
- 3.2.7 대입 연산자
- 3.2.8 논리 or 연산자
- 3.3 마치며
- 4장. 인터프리터
- 4.1 구문 트리 순회
- 4.2 구문 트리 실행기
- 4.2.1 엔트리 포인트 함수 호출
- 4.2.2 함수
- 4.2.3 print문
- 4.2.4 데이터 타입
- 4.2.5 문자열 리터럴
- 4.2.6 산술 연산
- 4.2.7 논리 연산
- 4.2.8 변수의 선언과 참조
- 4.2.9 for문
- 4.2.10 if문
- 4.2.11 continue문
- 4.2.12 함수 호출
- 4.2.13 함수호출 인자
- 4.2.14 return문
- 4.2.15 내장 함수
- 4.2.16 배열 리터럴
- 4.2.17 원소값 참조
- 4.2.18 원소값 변경
- 4.3 마치며
- 5장. 코드 생성
- 5.1 명령어와 목적 코드
- 5.2 코드 생성기
- 5.2.1 엔트리 포인트 함수 호출
- 5.2.2 함수
- 5.2.3 print문
- 5.2.4 문자열 리터럴
- 5.2.5 산술 연산자
- 5.2.6 식의 결과값
- 5.2.7 논리 or 연산자
- 5.2.8 변수 선언
- 5.2.9 변수 참조
- 5.2.10 for문
- 5.2.11 if문
- 5.2.12 continue문
- 5.2.13 함수 호출
- 5.2.14 배열 리터럴
- 5.2.15 원소값 참조
- 5.2.16 원소값 수정
- 5.3 마치며
- 6장. 가상 머신
- 6.1 스택 프레임과 콜 스택
- 6.2 코드 실행기
- 6.2.1 실행과 종료
- 6.2.2 함수의 주소
- 6.2.3 함수 호출
- 6.2.4 메모리 할당
- 6.2.5 문자열 리터럴
- 6.2.6 콘솔 출력
- 6.2.7 return문
- 6.2.8 덧셈 연산
- 6.2.9 논리 or 연산
- 6.2.10 변수 참조
- 6.2.11 for문과 if문
- 6.2.12 내장 함수
- 6.2.13 배열 리터럴
- 6.2.14 원소값 참조
- 6.2.15 원소값 변경
- 6.2.16 가비지 컬렉터
- 6.3 마치며
- 7장. 부록: 어셈블리
- 7.1 레지스터 머신
- 7.1.1 식의 계산
- 7.1.2 흐름 제어
- 7.1.3 함수의 호출과 종료
- 7.1.4 함수 호출 인자
- 7.1.5 매개변수와 지역변수
- 7.2 마치며