목차 일부
1장 컴파일러 개론 ... 13
1.1 프로그래밍 언어 ... 13
1.2 번역기와 컴파일러 ... 17
1.3 컴파일러의 일반적 구조 ... 20
1.4 컴파일러 자동화 도구 ... 28
1.4.1 어휘 분석기 생성기 ... 29
1.4.2 파서 생성기 ... 31
1.4.3 코드 생성의 자동화 ......
더보기
목차 전체
1장 컴파일러 개론 ... 13
1.1 프로그래밍 언어 ... 13
1.2 번역기와 컴파일러 ... 17
1.3 컴파일러의 일반적 구조 ... 20
1.4 컴파일러 자동화 도구 ... 28
1.4.1 어휘 분석기 생성기 ... 29
1.4.2 파서 생성기 ... 31
1.4.3 코드 생성의 자동화 ... 32
1.4.4 컴파일러-컴파일러 시스템 ... 33
연습문제 ... 37
2장 형식 언어 ... 39
2.1 언어 ... 39
2.2 문법 ... 44
2.3 문법의 종류 ... 56
연습문제 ... 62
3장 정규 언어 ... 69
3.1 정규 문법과 정규 언어 ... 69
3.2 정규 표현 ... 73
3.3 유한 오토마타 ... 80
3.3.1 결정적 유한 오토마타 ... 81
3.3.2 비결정적 유한 오토마타 ... 85
3.3.3 NFA에서 DFA로의 변환 ... 89
3.3.4 DFA의 상태수 최소화 ... 98
3.3.5 유한 오토마타의 닫힘 성질 ... 101
3.4 정규 언어의 속성 ... 103
3.4.1 정규 문법과 유한 오토마타 ... 104
3.4.2 유한 오토마타와 정규 표현 ... 107
3.4.3 정규 언어의 닫힘 성질 ... 115
3.4.4 정규 언어에 대한 펌핑 렘마 ... 118
연습문제 ... 121
4장 어휘 분석 ... 129
4.1 서론 ... 129
4.2 토큰 인식 ... 133
4.2.1 명칭의 인식 ... 133
4.2.2 정수의 인식 ... 134
4.2.3 실수의 인식 ... 135
4.2.4 스트링 상수의 인식 ... 137
4.2.5 주석의 처리 ... 138
4.3 어휘 분석기의 구현 ... 140
4.4 렉스 ... 146
4.4.1 렉스의 입력 ... 147
4.4.2 렉스의 정규 표현 ... 149
4.4.3 렉스의 액션 코드 ... 152
4.4.4 스캐너의 생성 및 동작 ... 154
연습문제 ... 159
5장 Context-free 문법 ... 165
5.1 서론 ... 165
5.2 유도와 유도 트리 ... 167
5.2.1 유도 ... 167
5.2.2 유도 트리 ... 170
5.2.3 모호성 ... 173
5.3 문법 변환 ... 177
5.3.1 필요없는 생성 규칙 제거 ... 178
5.3.2 ε-생성 규칙 제거 ... 183
5.3.3 단일 생성 규칙의 제거 ... 185
5.3.4 문법의 기본적인 형태 ... 188
5.4 CFG 표기법 ... 190
5.5 푸시다운 오토마타 ... 202
5.6 Context-free 언어와 PDA 언어 ... 209
연습문제 ... 215
6장 구문 분석 ... 225
6.1 구문 분석 방법 ... 226
6.2 구문 분석기의 출력 ... 231
6.2.1 파스 ... 232
6.2.2 파스 트리 ... 233
6.2.3 추상 구문 트리 ... 235
6.3 Top-Down 방법 ... 238
6.3.1 일반적인 top-down 방법 ... 238
6.3.2 Left-recursion ... 241
6.3.3 Left-factoring ... 245
6.3.4 No-backtracking의 조건 ... 246
6.4 Bottom-up 방법 ... 247
6.4.1 Reduce ... 247
6.4.2 Shift-reduce 구문 분석 ... 251
6.4.3 트리 생성 ... 253
연습문제 ... 257
7장 LL 구문 분석 ... 263
7.1 결정적 구문 분석 ... 264
7.1.1 FIRST ... 264
7.1.2 FOLLOW ... 269
7.1.3 LL 조건 ... 271
7.2 Reduce-descent 파서 ... 274
7.3 Predictive 파서 ... 282
7.4 Predictive 파싱 테이블의 구성 ... 288
7.5 Strong LL(k) 문법과 LL(k) 문법 ... 293
연습문제 ... 298
8장 LR 구문 분석 ... 305
8.1 LR 파서 ... 306
8.2 LR(O) 아이템의 집합 ... 311
8.3 SLR 파싱 테이블 구성 방법 ... 319
8.4 CLR 파싱 테이블 구성 방법 ... 325
8.5 LALR 파싱 테이블 구성 방법 ... 331
8.6 모호한 문법 ... 341
8.6.1 모호한 문법에서 구문 분석 행동의 순위 ... 341
8.6.2 모호한 문법에서의 구문 분석 ... 344
8.6.3 YACC에서 모호한 문법의 정의 방법 ... 348
8.7 LR 파싱 테이블의 구현 ... 349
8.7.1 ACTION 테이블의 기억 공간 축소 ... 350
8.7.2 GOTO 테이블의 기억 공간 축소 ... 352
8.8 구문 분석기의 작성 ... 353
연습문제 ... 358
9장 중간 언어 ... 367
9.1 소개 ... 367
9.2 Polish 표기법 ... 369
9.3 3-주소 코드 ... 371
9.4 트리 구조 코드 ... 375
9.5 가상 기계 코드 ... 381
9.5.1 P-코드 ... 382
9.5.2 EM-코드 ... 384
9.5.3 U-코드 ... 385
9.5.4 바이트코드 ... 395
9.6 중간 언어의 선택 ... 398
연습문제 ... 401
10장 중간 언어의 생성 ... 407
10.1 소개 ... 407
10.2 문법-지시적 변환 ... 409
10.2.1 문법-지시적 변환의 모델 ... 409
10.2.2 의미 규칙 ... 411
10.2.3 문법-지시적 변환기의 구현 ... 412
10.2.4 AST의 구성 ... 415
10.3 AST의 설계 및 생성 ... 417
10.3.1 AST의 설계 ... 417
10.3.2 AST 노드의 구조 ... 422
10.3.3 AST의 생성 ... 423
10.4 중간 코드 생성 ... 431
10.4.1 중간 코드 생성기 ... 432
10.4.2 선언문 ... 435
10.4.3 배정문 ... 438
10.4.4 제어문 ... 443
10.4.5 프로시저 호출문 ... 450
10.5 U-코드 번역기 ... 453
연습문제 ... 457
11장 코드 최적화 ... 461
11.1 기본 블록 ... 462
11.2 지역 최적화 ... 467
11.2.1 공통 부분식의 제거 ... 467
11.2.2 연산 강도 경감 ... 468
11.2.3 상수 폴딩과 전파 ... 469
11.2.4 대수학적 간소화 ... 470
11.3 루프 최적화 ... 470
11.3.1 루프 불변 코드 이동 ... 471
11.3.2 연산 강도 경감 ... 471
11.3.3 루프 언롤링 ... 473
11.3.4 루프 융합 ... 473
11.3.5 영으로의 카운트 ... 474
11.4 전역 최적화 ... 474
11.4.1 공통 부분식의 제거 ... 474
11.4.2 전역 상수 폴딩과 전파 ... 475
11.4.3 도달될 수 없는 코드의 제거 ... 475
11.4.4 조건문의 재구성 ... 476
11.4.5 연속된 GOTO의 축약 ... 476
11.5 기계 종속적 최적화 ... 477
11.5.1 중복된 load의 제거 ... 477
11.5.2 효율적인 명령어 선택 ... 478
11.5.3 레지스터 할당 ... 479
11.5.4 연산 순서 ... 480
11.5.5 핍홀 최적화 ... 480
12장 심벌 테이블 ... 481
12.1 심벌 테이블의 기능 ... 481
12.2 심벌 테이블의 내용 ... 482
12.3 심벌 테이블의 운용 ... 484
12.4 심벌 테이블의 구성 ... 487
12.4.1 비정렬된 심벌 테이블 ... 487
12.4.2 정렬된 심벌 테이블 ... 487
12.4.3 트리 구조 심벌 테이블 ... 488
12.4.4 해시 심벌 테이블 ... 490
12.5 블록 구조 언어에 대한 심벌 테이블 ... 493
12.5.1 스택 심벌 테이블 ... 494
12.5.2 스택 구현 트리 구조 심벌 테이블 ... 495
12.5.3 스택 구현 해시 구조 심벌 테이블 ... 497
13장 에러 처리 ... 499
13.1 에러의 종류 ... 500
13.2 에러 탐지 및 보고 ... 502
13.3 단계별 에러 처리 ... 504
13.3.1 어휘 분석 단계 에러 ... 505
13.3.2 구문 단계 에러 ... 507
13.3.3 의미 에러 ... 515
14장 컴파일러 자동화 도구 ... 517
14.1 스캐너 생성기 ... 518
14.2 파서 생성기 ... 521
14.2.1 YACC ... 522
14.2.2 스탠포드 파서 제작 시스템 ... 532
14.2.3 위스콘신 파서 제작 시스템 ... 536
14.3 코드 생성의 자동화 ... 539
14.3.1 해석적 코드 생성 ... 540
14.3.2 패턴 매칭 코드 생성 ... 542
14.3.3 테이블을 이용한 코드 생성 ... 543
14.4 컴파일러-컴파일러 시스템 ... 545
14.4.1 PQCC ... 545
14.4.2 ACK ... 546
연습문제 ... 558
부록A 미니파스칼 ... 563
A.1 소개 ... 563
A.2 어휘 구조 ... 564
A.3 구문 구조 ... 565
A.4 예제 프로그램 ... 566
A.5 문법 형태 ... 569
부록B U-코드 인터프리터 ... 572
참고 문헌 ... 592
찾아보기 ... 599
더보기 닫기