History

  • [2025-06-06 Fri 12:36] 컴파일러 노트가 없다. 이 키워드들을 적어 놔야 한다.

BIBLIOGRAPHY

박두순. 2016. 컴파일러의 이해. https://m.yes24.com/goods/detail/89109612.

나카다 이쿠오. n.d. 만들면서 배우는 컴파일러 첫걸음. Translated by 윤인성. Accessed April 5, 2025. https://m.yes24.com/goods/detail/102185325.

컴파일러의 이해

  • Understanding of the compiler

(박두순 2016) 박두순 2016

컴파일러는 시스템 프로그램이기 때문에 시스템에 관련된 모든 내용을 알아야 하므로 난이도가 높은 편이다. 하지만 이 책은 컴파일러 학습 관련 지식을 부분적으로 간단히 소개하여 쉽게 배울 수 있다.

컴파일러는 시스템 프로그램이기 때문에 시스템에 관련된 모든 내용을 알아야 하므로 난이도가 높은 편이다. 하지만 이 책은 컴파일러 학습 관련 지식을 부분적으로 간단히 소개하여 쉽게 배울 수 있다. 총 13장으로 구성되어 있으며, 12장에서는 컴파일러의 개요를 훑고, 3장과 5장에서는 어휘 분석기와 구문 분석기를 설명하기 위해 형식 언어와 오토마타의 이론을, 4장과 612장에서는 컴파일러를 각 부분별로 다룬다. 마지막으로 13장에서는 어휘 분석기 생성기인 렉스(플렉스)와 구문 분석기 생성기인 야크(바이슨)의 실제 사용법을 설명했다.

Chapter 01 컴파일러의 개요

01 컴파일러의 필요성

02 프로그래밍 언어

  • 1 수치 계산용 언어
  • 2 사무 처리용 언어
  • 3 인공지능 언어
  • 4 시스템 프로그래밍 언어
  • 5 기타 언어
  • 6 프로그래밍 언어의 기본 개념

03 번역기의 종류

Chapter 02 간단한 컴파일러의 구조

01 컴파일러의 논리적 구조

  • 1 개요
  • 2 논리적 구조

02 컴파일러의 물리적 구조

Chapter 03 형식 언어와 유한 오토마타

01 형식 언어

02 형식 문법

03 문법 표기법

  • 1 정규 표현
  • 2 문법 도표
  • 3 BNF 표기법
  • 4 EBNF 표기법

04 유한 오토마타

  • 1 유한 오토마타
  • 2 NFA에서 DFA로의 변환
  • 3 DFA의 상태수 최소화
  • 4 정규 문법, 정규 표현, 유한 오토마타의 동치 관계

Chapter 04 어휘 분석

01 어휘 분석의 개요

02 토큰의 인식

  • 1 식별자의 인식
  • 2 예약어의 인식
  • 3 정수의 인식
  • 4 실수 상수의 인식
  • 5 주석 처리

03 어휘 분석기의 설계 및 구현

Chapter 05 문맥자유 문법과 푸시다운 오토마타

01 문맥자유 문법

02 파스 트리

03 모호한 문법

04 문법 변환

  • 1 불필요한 생성 규칙의 제거
  • 2 ε-생성 규칙의 제거
  • 3 단일 생성 규칙의 제거
  • 4 좌인수분해
  • 5 좌재귀의 제거
  • 05 푸시다운 오토마타

Chapter 06 구문 분석

01 구문 분석의 개요

02 하향식 구문 분석

  • 1 FIRST와 FOLLOW
  • 2 재귀적 하강 구문 분석
  • 3 예측 구문 분석

03 상향식 구문 분석

  • 1 이동-감축 구문 분석
  • 2 연산자 우선순위 구문 분석
  • 3 LR 구문 분석

04 모호한 문법의 사용과 에러 처리 루틴

Chapter 07 의미 분석과 형 검사

01 의미 분석의 개요

02 기호표

03 속성 문법

04 형 검사

  • 1 자료형의 종류
  • 2 형 시스템
  • 3 형 변환

Chapter 08 중간 언어와 중간 코드 생성

01 중간 언어

  • 1 중간 언어의 개념
  • 2 중간 언어의 종류

02 구문 지시적 번역

03 중간 코드 생성

  • 1 논리식
  • 2 치환문

Chapter 09 구조적 자료형과 실행 시간 환경

01 구조적 자료형

  • 1 레코드
  • 2 배열

02 메모리 구성

03 메모리 할당 전략

  • 1 정적 메모리 할당
  • 2 스택 메모리 할당
  • 3 힙 메모리 할당

04 매개변수 전달 방법

  • 1 값 호출
  • 2 참조 호출
  • 3 이름 호출
  • 4 값-결과 호출

Chapter 10 코드 최적화

01 코드 최적화

02 기본 블록과 흐름 그래프

  • 1 기본 블록
  • 2 제어 흐름 그래프와 DAG
  • 3 흐름 분석

03 최적화 기법

  • 1 핍홀 최적화 기법
  • 2 지역 최적화 기법
  • 3 루프 최적화 기법
  • 4 전역 최적화 기법
  • 5 기계 종속적 최적화 기법

Chapter 11 병렬성과 지역성을 위한 최적화

01 병렬 처리

  • 1 병렬 처리 시스템
  • 2 병렬 처리에 대한 여러 가지 개념

02 자료 종속과 자료 종속 분석

  • 1 자료 종속
  • 2 자료 종속 분석

03 루프 변환

  • 1 루프 융합
  • 2 루프 분리
  • 3 루프 역순
  • 4 루프 교환
  • 5 루프 기울임
  • 6 스트립 마이닝
  • 7 루프 타일링

Chapter 12 목적 코드 생성

01 목적 코드 생성의 개념

02 트리-패턴 매칭 기법

03 목적 코드 생성

  • 1 산술식에 대한 목적 코드 생성
  • 2 논리식에 대한 목적 코드 생성

04 레지스터 할당과 배정

  • 1 지역 레지스터 할당과 배정
  • 2 전역 레지스터 할당과 배정
  • 3 그래프 착색에 의한 레지스터 할당

Chapter 13 렉스와 야크

01 렉스와 야크

  • 1 렉스
  • 2 야크

02 렉스와 야크의 입력 파일 형식

  • 1 렉스의 입력 파일 형식
  • 2 야크의 입력 파일 형식

03 플렉스와 바이슨 설치 방법

04 플렉스 사용법

05 바이슨 사용법

출판사 리뷰

방대한 컴파일러 이론 중 핵심만 추려 다룹니다.

컴파일러는 시스템 프로그램이기 때문에 시스템에 관련된 모든 내용을 알아야 하므로 난이도가 높은 편입니다. 하지만 이 책은 컴파일러 학습 관련 지식을 부분적으로 간단히 소개하여 쉽게 배울 수 있습니다. 총 13장으로 구성되어 있으며, 12장에서는 컴파일러의 개요를 훑고, 3장과 5장에서는 어휘 분석기와 구문 분석기를 설명하기 위해 형식 언어와 오토마타의 이론을, 4장과 612장에서는 컴파일러를 각 부분별로 다룹니다. 마지막으로 13장에서는 어휘 분석기 생성기인 렉스(플렉스)와 구문 분석기 생성기인 야크(바이슨)의 실제 사용법을 설명했습니다.

30년 이상 컴파일러를 강의해온 저자의 경험과 지식을 바탕으로 쉽게 설명합니다.

컴파일러의 구조나 동작에 대해 설명하기란 매우 어렵습니다. 저자 또한 30년 가까이 컴파일러를 강의해왔지만, 어떻게 설명해야 컴파일러를 조금이라도 쉽게 이해시킬 수 있을지 고심하며 이 책을 집필했습니다. 이 책을 통해 30년 이상 컴파일러를 강의해온 저자의 경험과 지식을 경험할 수 있을 것입니다.

기본 원리뿐만 아니라 실무에서 유용한 컴파일러 후단부 기술(실행 시간 환경과 최적화)도 다룹니다.

  • 코드 최적화(10장)
  • 병렬성과 지역성을 위한 최적화(11장)
  • 목적 코드 생성(12장)
  • 플렉스와 바이슨의 설치와 실제 사용법 설명(13장)

만들면서 배우는 컴파일러 첫걸음

(나카다 이쿠오 n.d.)

나카다 이쿠오 윤인성

“작은 컴파일러를 만들며 익히는 컴파일러 기본기”

컴파일러 개발은 이론적으로도 복잡하고 엔지니어링적으로도 많은 노력이 필요하다 보니 대부분 다가가기를 꺼리게 되는 분야다. 그런데 컴파일러가 처음부터 복잡했던 것은 아니다. 컴퓨터 과학·공학의 연구·구현 성과가 쌓이기 전에는 단순하고 작은 언어와 그 컴파일러가 있었고 이런 것들은 만들어 보면서 컴파일러 개발을 익혔고 이 방법은 지금도 어느 정도는 유용하다. 이 책은 교육적 성격의 프로그래밍 언어인 PL/0′ 컴파일러를 개발하면서 컴파일러의 기본적인 이론과 구조, 구현의 기초를 배울 수 있게 안내한다.

이 책에서 배우는 내용

  • 컴파일러 개요
  • 문법과 언어
  • 낱말, 구문, 의미 분석
  • 오류 처리
  • 간단한 가상 머신과 인터프리터의 예

1장 컴파일러 개요

1.1 컴파일러란? 1.2 변환 시스템과 통역 시스템 연습 문제

2장 컴파일러의 간단한 예

2.1 후위 표기법 2.2 스택 2.3 간단한 컴파일러의 예 2.4 컴파일러의 이론적 구조 2.5 컴파일러의 물리적 구조 연습 문제

3장 문법과 언어

  • 3.1 배커스 표기법
  • 3.2 구문 도식
  • 3.3 문법과 언어의 형식적 정의
  • 3.4 분석 트리
  • 3.5 PL/0′의 문법

4장 낱말 분석

  • 4.1 문자 읽어 들이기
  • 4.2 낱말 읽어 들이기
  • 4.3 정규 표현과 유한 오토마타
  • 4.4 낱말을 읽어 들이는 프로그램의 예

5장 하향식 구문 분석

  • 5.1 구문 분석 방법의 간단한 역사
  • 5.2 하향식 구문 분석법과 그 문제점
  • 5.3 LL(1) 문법
  • 5.4 재귀적 하향식 구문 분석 프로그램
  • 5.5 문법에서 하향식 구문 분석 프로그램으로
  • 5.6 PL/0′의 재귀적 하향식 구문 분석 프로그램

6장 의미 분석

  • 6.1 의미 분석이란?
  • 6.2 기호 테이블의 정보
  • 6.3 기호 테이블 탐색
  • 6.4 블록 구조와 기호 테이블
  • 6.5 PL/0′ 컴파일러의 기호 테이블

7장 오류 처리

  • 7.1 오류 처리란?
  • 7.2 오류 발견
  • 7.3 오류 정보 출력
  • 7.4 오류 복구
  • 7.5 정상 처리로의 복귀
  • 7.6 PL/0′ 컴파일러의 오류 처리

8장 가상 머신과 통역 시스템

  • 8.1 가상 머신이란?
  • 8.2 가상 머신의 기능
  • 8.3 가상 머신의 기억 영역 관리
  • 8.4 가상 기계어로의 변환
  • 8.5 가상 머신 구현(통역 시스템)
  • 8.6 PL/0′ 머신과 PL/0′의 목적 코드

9장 더 공부하려면

10장 PL/0′ 컴파일러의 코드