캠퍼스간대출 소재불명도서 자료배달서비스 인쇄
No. | 등록번호 | 청구기호 | 소장처 | 도서상태 | 반납예정일 | 예약 | 서비스 | 매체정보 |
---|---|---|---|---|---|---|---|---|
1 | M0384179 | 005.13 S428p2ㅁ | 삼성캠퍼스/종합자료실/ | 대출가능 | false|true|true|false |true|true |
|
서평 ... 4
추천의 글 ... 6
옮긴이의 말 ... 8
옮긴이 소개 ... 10
저자 소개 ... 11
감사의 글 ... 12
1부 프로그래밍 언어의 기초 ... 36
01장 소개 ... 39
1.1 언어 설계의 기술 ... 41
1.2 프로그래밍 언어의 스펙트럼 ... 45
1.3 프로그래밍 언어를 공부해야 하는...
서평 ... 4
추천의 글 ... 6
옮긴이의 말 ... 8
옮긴이 소개 ... 10
저자 소개 ... 11
감사의 글 ... 12
1부 프로그래밍 언어의 기초 ... 36
01장 소개 ... 39
1.1 언어 설계의 기술 ... 41
1.2 프로그래밍 언어의 스펙트럼 ... 45
1.3 프로그래밍 언어를 공부해야 하는 이유 ... 47
1.4 컴파일과 해석 ... 50
1.5 프로그래밍 환경 ... 57
1.6 컴파일 개요 ... 59
1.6.1 어휘 분석과 구문 분석 ... 60
1.6.2 의미 분석과 중간 코드 생성 ... 62
1.6.3 목표 코드 생성 ... 65
1.6.4 코드 개선 ... 67
1.7 정리 ... 68
1.8 연습문제 ... 69
1.9 탐구문제 ... 71
1.10 참고자료 ... 73
02장 프로그래밍 언어 구문 ... 75
2.1 구문 명시: 정규식과 문맥 자유 문법 ... 77
2.1.1 토큰과 정규식 ... 77
2.1.2 문맥 자유 문법 ... 80
2.1.3 유도와 구문 분석 트리 ... 81
2.2 어휘 분석 ... 85
2.2.1 유한 오토마타 생성 ... 88
2.2.2 어휘 분석기의 코드 ... 93
2.2.3 테이블 주도형 어휘 분석 ... 97
2.2.4 어휘 오류 ... 97
2.2.5 프래그마 ... 99
2.3 구문 분석 ... 101
2.3.1 재귀 하강 ... 104
2.3.2 테이블 주도형 하향식 구문 분석 ... 111
2.3.3 상향식 구문 분석 ... 123
2.3.4 구문 오류 [CD-1] ... 137
2.4 이론적 기초 사항 [CD-14] ... 138
2.4.1 유한 오토마타 [CD-14]
2.4.2 푸쉬다운 오토마타 [CD-17]
2.4.3 문법과 언어 부류 [CD-18]
2.5 정리 ... 139
2.6 연습문제 ... 140
2.7 탐구문제 ... 146
2.8 참고자료 ... 147
03장 이름, 유효 범위, 바인딩 ... 149
3.1 바인딩 시점의 의미 ... 151
3.2 객체 수명과 저장 공간 관리 ... 153
3.2.1 정적 할당 ... 154
3.2.2 스택 기반 할당 ... 156
3.2.3 힙 기반 할당 ... 157
3.2.4 가비지 컬렉션 ... 159
3.3 유효 범위 규칙 ... 161
3.3.1 정적 유효 범위 ... 162
3.3.2 중첩된 서브루틴 ... 163
3.3.3 선언 순서 ... 167
3.3.4 모듈 ... 172
3.3.5 모듈 유형과 클래스 ... 176
3.3.6 동적 유효 범위 ... 179
3.4 유효 범위의 구현 [CD-23] ... 183
3.4.1 심볼 테이블 [CD-23]
3.4.2 관계 리스트와 중앙 참조 테이블 [CD-27]
3.5 참조 환경의 바인딩 ... 184
3.5.1 서브루틴 클로저 ... 186
3.5.2 제1종 서브루틴과 제2종 서브루틴 ... 188
3.6 유효 범위 내에서의 바인딩 ... 190
3.6.1 별칭 ... 190
3.6.2 다중 정의 ... 192
3.6.3 다형성과 관련 개념 ... 194
3.7 분리 컴파일 [CD-30] ... 198
3.7.1 C의 분리 컴파일 [CD-31]
3.7.2 패키지와 자동 헤더 추론 [CD-34]
3.7.3 모듈 계층 [CD-35]
3.8 정리 ... 199
3.9 연습문제 ... 200
3.10 탐구문제 ... 209
3.11 참고자료 ... 212
04장 의미 분석 ... 213
4.1 의미 분석기의 역할 ... 214
4.2 속성 문법 ... 218
4.3 속성 평가 ... 220
4.4 동작 루틴 ... 232
4.5 속성을 위한 저장 공간의 관리 [CD-37] ... 234
4.5.1 상향식 평가 [CD-37]
4.5.2 하향식 평가 [CD-42]
4.6 구문 트리 장식 ... 235
4.7 정리 ... 241
4.8 연습문제 ... 242
4.9 탐구문제 ... 248
4.10 참고자료 ... 250
05장 타겟 머신의 구조 ... 251
5.1 메모리 계층 ... 252
5.2 자료 표현 ... 255
5.2.1 컴퓨터 산술 [CD-49] ... 256
5.3 명령어 집합 구조 ... 257
5.3.1 주소 지정 방식 ... 258
5.3.2 조건과 분기 ... 258
5.4 구조와 구현 ... 261
5.4.1 마이크로프로그래밍 ... 262
5.4.2 마이크로프로세서 ... 263
5.4.3 RISC ... 264
5.4.4 구조의 두 가지 예: x86과 MIPS [CD-55] ... 265
5.4.5 유사 어셈블리 표기법 ... 266
5.5 최신 프로세서를 위한 컴파일 ... 267
5.5.1 파이프라인을 꽉 차게 유지 ... 268
5.5.2 레지스터 할당 ... 273
5.6 정리 ... 279
5.7 연습문제 ... 281
5.8 탐구문제 ... 285
5.9 참고자료 ... 288
2부 프로그래밍 언어의 핵심 요소 ... 290
06장 제어 흐름 ... 293
6.1 수식의 값 계산 ... 294
6.1.1 우선순위와 결합법칙 ... 296
6.1.2 대입 ... 298
6.1.3 초기화 ... 307
6.1.4 수식 내의 순서 결정 ... 310
6.1.5 지름길 계산 ... 313
6.2 구조화된 흐름과 구조화되지 않은 흐름 ... 316
6.2.1 goto의 구조화된 대체자 ... 317
6.2.2 재개 ... 320
6.3 열거 ... 321
6.4 선택 ... 323
6.4.1 지름길화된 조건 ... 324
6.4.2 Case/Switch문 ... 326
6.5 반복 ... 333
6.5.1 열거 제어형 루프 ... 333
6.5.2 루프의 조합 ... 340
6.5.3 반복자 ... 341
6.5.4 아이콘의 생성기 [CD-62] ... 348
6.5.5 논리 제어형 루프 ... 348
6.6 재귀 ... 352
6.6.1 반복과 재귀 ... 352
6.6.2 적용 순서와 정규 순서 값 계산 ... 356
6.7 비결정성 [CD-65] ... 360
6.8 정리 ... 361
6.9 연습문제 ... 363
6.10 탐구문제 ... 371
6.11 참고자료 ... 373
07장 자료형 ... 375
7.1 유형 시스템 ... 376
7.1.1 유형 검사 ... 377
7.1.2 다형성 ... 377
7.1.3 유형의 정의 ... 379
7.1.4 유형의 분류 ... 380
7.1.5 직교성 ... 387
7.2 유형 검사 ... 389
7.2.1 유형 등가 ... 390
7.2.2 유형 호환 ... 397
7.2.3 유형 추론 ... 402
7.2.4 ML의 유형 시스템 [CD-71] ... 405
7.3 레코드(구조체)와 베리언트(공용체) ... 406
7.3.1 구문과 연산 ... 406
7.3.2 메모리 배치와 그 효과 ... 408
7.3.3 with문 [CD-81] ... 411
7.3.4 베리언트 레코드 ... 412
7.4 배열 ... 420
7.4.1 구문과 연산 ... 421
7.4.2 차원, 범위와 할당 ... 425
7.4.3 메모리 배치 ... 430
7.5 문자열 ... 438
7.6 집합 ... 439
7.7 포인터와 재귀형 ... 441
7.7.1 구문과 연산 ... 442
7.7.2 댕글링 참조 ... 451
7.7.3 가비지 컬렉션 ... 455
7.8 리스트 ... 462
7.9 파일과 입력/출력 [CD-65] ... 465
7.9.1 상호작용적 I/O [CD-85]
7.9.2 파일 기반의 I/O [CD-86]
7.9.3 텍스트 I/O [CD-88]
7.10 등가 검사와 대입 ... 466
7.11 정리 ... 469
7.12 연습문제 ... 471
7.13 탐구문제 ... 479
7.14 참고자료 ... 480
08장 서브루틴과 제어 추상화 ... 483
8.1 스택 배치의 복습 ... 484
8.2 호출 순서 ... 486
8.2.1 디스플레이 [CD-97] ... 489
8.2.2 사례 연구: MIPS상의 C, x86상의 파스칼 [CD-101] ... 490
8.2.3 레지스터 윈도우 [CD-109] ... 491
8.2.4 인라인 확장 ... 491
8.3 매개변수 전달 ... 494
8.3.1 매개변수 방식 ... 495
8.3.2 이름에 의한 호출 [CD-112] ... 501
8.3.3 특별한 목적의 매개변수 ... 504
8.3.4 함수 복귀 ... 510
8.4 제네릭 서브루틴과 모듈 ... 512
8.4.1 구현 선택 사항 ... 513
8.4.2 제네릭 매개변수의 제약 조건 ... 516
8.4.3 묵시적인 인스턴스화 ... 518
8.4.4. C++, 자바, C에서의 제네릭 [CD-115] ... 519
8.5 예외 처리 ... 520
8.5.1 예외의 정의 ... 522
8.5.2 예외 전파 ... 524
8.5.3 예: 재귀 하강 구문 분석기에서 단계 수준 복구 ... 528
8.5.4 예외의 구현 ... 529
8.6 동시 실행 루틴 ... 532
8.6.1 스택 할당 ... 535
8.6.2 전이 ... 536
8.6.3 반복자의 구현 [CD-126] ... 538
8.6.4 분리적 이벤트 시뮬레이션 [CD-131] ... 538
8.7 정리 ... 539
8.8 연습문제 ... 540
8.9 탐구문제 ... 549
8.10 참고자료 ... 551
09장 자료 추상화와 객체지향 ... 553
9.1 객체지향 프로그래밍 ... 555
9.2 캡슐화와 상속 ... 566
9.2.1 모듈 ... 567
9.2.2 클래스 ... 570
9.2.3 유형 확장 ... 572
9.3 초기화와 종결화 ... 575
9.3.1 생성자의 선택 ... 576
9.3.2 참조와 값 ... 578
9.3.3 실행 순서 ... 581
9.3.4 가비지 컬렉션 ... 583
9.4 동적 메소드 바인딩 ... 584
9.4.1 가상과 비가상 메소드 ... 587
9.4.2 추상 클래스 ... 588
9.4.3 멤버 검색 ... 589
9.4.4 다형성 ... 593
9.4.5 클로저 ... 596
9.5 다중 상속 [CD-135] ... 599
9.5.1 의미적 모호성 [CD-138]
9.5.2 중복 상속 [CD-141]
9.5.3 공유 상속 [CD-142]
9.5.4 혼합 상속 [CD-144]
9.6 객체지향 프로그래밍 다시 보기 ... 600
9.6.1 스몰토크의 객체 모델 [CD-148] ... 601
9.7 정리 ... 601
9.8 연습문제 ... 603
9.9 탐구문제 ... 608
9.10 참고자료 ... 609
3부 다른 관점에서 바라본 프로그래밍 모델 ... 612
10장 함수형 언어 ... 615
10.1 역사적 기원 ... 616
10.2 함수형 프로그래밍의 개념 ... 618
10.3 스킴 복습/개관 ... 620
10.3.1 바인딩 ... 623
10.3.2 리스트와 숫자 ... 624
10.3.3 동일성 검사와 검색 ... 624
10.3.4 제어 흐름과 대입 ... 625
10.3.5 리스트로서의 프로그램 ... 627
10.3.6 확장된 예: DFA 시뮬레이션 ... 630
10.4 계산 순서 다시 보기 ... 632
10.4.1 엄밀성과 게으른 계산 ... 634
10.4.2 I/O: 스트림과 모나드 ... 636
10.5 고차 함수 ... 639
10.6 이론적 기초 [CD-152] ... 643
10.6.1 람다 연산 [CD-154]
10.6.2 제어 흐름 [CD-158]
10.6.3 구조체 [CD-160]
10.7 한눈에 보는 함수형 프로그래밍 ... 643
10.8 정리 ... 646
10.9 연습문제 ... 647
10.10 탐구문제 ... 653
10.11 참고자료 ... 654
11장 논리형 언어 ... 657
11.1 논리형 프로그래밍의 개념 ... 658
11.2 프롤로그 ... 659
11.2.1 도출과 단일화 ... 661
11.2.2 리스트 ... 662
11.2.3 산술 ... 663
11.2.4 검색/실행 순서 ... 664
11.2.5 확장된 예P: Tic-Tac-Toe ... 667
11.2.6 명령형 제어 흐름 ... 670
11.2.7 데이터베이스 조작 ... 673
11.3 이론적 기초 [CD-163] ... 678
11.3.1 절 형태 [CD-164]
11.3.2 한계점 [CD-165]
11.3.3 스콜렘화 [CD-167]
11.4 한눈에 보는 논리형 프로그래밍 ... 679
11.4.1 다룰 수 없는 일부 논리 ... 679
11.4.2 실행 순서 ... 679
11.4.3 부정과 '닫힌 세계' 가정 ... 681
11.5 정리 ... 683
11.6 연습문제 ... 684
11.7 탐구문제 ... 687
11.8 참고자료 ... 689
12장 병행 처리 ... 691
12.1 배경과 동기 ... 692
12.1.1 간단한 역사 ... 693
12.1.2 다중 스레드 프로그램의 경우 ... 695
12.1.3 다중 프로세서 구조 ... 700
12.2 병행 프로그래밍 기초 ... 704
12.2.1 통신과 동기화 ... 704
12.2.2 언어와 라이브러리 ... 706
12.2.3 스레드 생성 구문 ... 707
12.2.4 스레드 구현 ... 717
12.3 공유 메모리 ... 724
12.3.1 바쁜 대기 동기화 ... 724
12.3.2 스케줄러의 구현 ... 728
12.3.3 세마포어 ... 732
12.3.4 감독자 ... 735
12.3.5 조건 임계 영역 ... 739
12.3.6 묵시적 동기화 ... 745
12.4 메시지 전달 ... 749
12.4.1 통신 상대의 명명 ... 749
12.4.2 전송 ... 753
12.4.3 수신 ... 758
12.4.4 원격 프로시저 호출 ... 764
12.5 정리 ... 768
12.6 연습문제 ... 770
12.7 탐구문제 ... 777
12.8 참고자료 ... 778
13장 스크립팅 언어 ... 781
13.1 스크립팅 언어란 ... 782
13.1.1 공통적인 특징 ... 784
13.2 문제 영역 ... 788
13.2.1 쉘 언어 ... 788
13.2.2 문서 처리와 보고서 생성 ... 796
13.2.3 수학과 통계 ... 801
13.2.4 접착 언어와 범용 스크립팅 ... 802
13.2.5 확장 언어 ... 810
13.3 월드 와이드 웹 스크립팅 ... 814
13.3.1 CGI 스크립트 ... 815
13.3.2 내장형 서버 측 스크립트 ... 818
13.3.3 클라이언트 측 스크립트 ... 821
13.3.4 자바 애플릿 ... 823
13.3.5 XSLT ... 825
13.4 혁신적인 기능 ... 838
13.4.1 이름과 유효 범위 ... 838
13.4.2 문자열과 패턴 처리 ... 844
13.4.3 자료형 ... 852
13.4.4 객체지향 ... 858
13.5 정리 ... 866
13.6 연습문제 ... 868
13.7 탐구문제 ... 874
13.8 참고자료 ... 875
4부 로우레벨로 되짚어본 프로그램의 비밀 ... 878
14장 실행 가능한 프로그램 작성 ... 881
14.1 후단 컴파일러 구조 ... 881
14.1.1 단계 집합 ... 882
14.1.2 단계와 패스 ... 886
14.2 중간 형태 [CD-169] ... 886
14.2.1 다이애나 [CD-169]
14.2.2 GNU RTL [CD-172]
14.3 코드 생성 ... 889
14.3.1 속성 문법의 예 ... 890
14.3.2 레지스터 할당 ... 892
14.4 주소 공간 구조 ... 895
14.5 어셈블리 ... 897
14.5.1 명령어 생성 ... 899
14.5.2 이름에 주소 할당 ... 901
14.6 링킹 ... 902
14.6.1 재배치와 이름 결정 ... 904
14.6.2 유형 검사 ... 904
14.7 동적 링킹 [CD-175] ... 906
14.7.1 위치 독립적 코드 [CD-175]
14.7.2 완전히 동적인(게으른) 링킹 [CD-177]
14.8 정리 ... 907
14.9 연습문제 ... 909
14.10 탐구문제 ... 911
14.11 참고자료 ... 913
15장 코드 개선 [CD-180] ... 915
15.1 코드 개선의 여러 단계 [CD-182]
15.2 국소적 최적화 [CD-184]
15.3 기본 블록에서의 중복 제거 [CD-187]
15.3.1 실제 예 [CD-188]
15.3.2 값 번호 지정 [CD-191]
15.4 전역 중복과 자료 흐름 분석 [CD-196]
15.4.1 SSA 형태와 전역 값 번호 지정 [CD-196]
15.4.2 전역 공통 하위 수식 제거 [CD-200]
15.5 루프 개선 Ⅰ [CD-207]
15.5.1 루프 불변식 [CD-207]
15.5.2 귀납 변수 [CD-210]
15.6 명령어 스케줄링 [CD-212]
15.7 루프 개선 Ⅱ [CD-216]
15.7.1 루프 펼치기와 소프트웨어 파이프라이닝 [CD-217]
15.7.2 루프 재정렬 [CD-221]
15.8 레지스터 할당 [CD-228]
15.9 정리 [CD-233]
15.10 연습문제 [CD-234]
15.11 탐구문제 [CD-239]
15.12 참고자료 [CD-241]
부록 A 이 책에서 다룬 프로그래밍 언어 ... 917
부록 B '설계와 구현' 목차 ... 929
부록 C '예' 목차 ... 935
참고자료 ... 951
찾아보기 ... 971
부록 CD 활용 방법 ... 1004
서평 ... 4
추천의 글 ... 6
옮긴이의 말 ... 8
옮긴이 소개 ... 10
저자 소개 ... 11
감사의 글 ... 12
1부 프로그래밍 언어의 기초 ... 36
01장 소개 ... 39
1.1 언어 설계의 기술 ... 41
1.2 프로그래밍 언어의 스펙트럼 ... 45
1.3 프로그래밍 언어를 공부해야 하는 이유 ... 47
1.4 컴파일과 해석 ... 50
1.5 프로그래밍 환경 ... 57
1.6 컴파일 개요 ... 59
1.6.1 어휘 분석과 구문 분석 ... 60
1.6.2 의미 분석과 중간 코드 생성 ... 62
1.6.3 목표 코드 생성 ... 65
1.6.4 코드 개선 ... 67
1.7 정리 ... 68
1.8 연습문제 ... 69
1.9 탐구문제 ... 71
1.10 참고자료 ... 73
02장 프로그래밍 언어 구문 ... 75
2.1 구문 명시: 정규식과 문맥 자유 문법 ... 77
2.1.1 토큰과 정규식 ... 77
2.1.2 문맥 자유 문법 ... 80
2.1.3 유도와 구문 분석 트리 ... 81
2.2 어휘 분석 ... 85
2.2.1 유한 오토마타 생성 ... 88
2.2.2 어휘 분석기의 코드 ... 93
2.2.3 테이블 주도형 어휘 분석 ... 97
2.2.4 어휘 오류 ... 97
2.2.5 프래그마 ... 99
2.3 구문 분석 ... 101
2.3.1 재귀 하강 ... 104
2.3.2 테이블 주도형 하향식 구문 분석 ... 111
2.3.3 상향식 구문 분석 ... 123
2.3.4 구문 오류 [CD-1] ... 137
2.4 이론적 기초 사항 [CD-14] ... 138
2.4.1 유한 오토마타 [CD-14]
2.4.2 푸쉬다운 오토마타 [CD-17]
2.4.3 문법과 언어 부류 [CD-18]
2.5 정리 ... 139
2.6 연습문제 ... 140
2.7 탐구문제 ... 146
2.8 참고자료 ... 147
03장 이름, 유효 범위, 바인딩 ... 149
3.1 바인딩 시점의 의미 ... 151
3.2 객체 수명과 저장 공간 관리 ... 153
3.2.1 정적 할당 ... 154
3.2.2 스택 기반 할당 ... 156
3.2.3 힙 기반 할당 ... 157
3.2.4 가비지 컬렉션 ... 159
3.3 유효 범위 규칙 ... 161
3.3.1 정적 유효 범위 ... 162
3.3.2 중첩된 서브루틴 ... 163
3.3.3 선언 순서 ... 167
3.3.4 모듈 ... 172
3.3.5 모듈 유형과 클래스 ... 176
3.3.6 동적 유효 범위 ... 179
3.4 유효 범위의 구현 [CD-23] ... 183
3.4.1 심볼 테이블 [CD-23]
3.4.2 관계 리스트와 중앙 참조 테이블 [CD-27]
3.5 참조 환경의 바인딩 ... 184
3.5.1 서브루틴 클로저 ... 186
3.5.2 제1종 서브루틴과 제2종 서브루틴 ... 188
3.6 유효 범위 내에서의 바인딩 ... 190
3.6.1 별칭 ... 190
3.6.2 다중 정의 ... 192
3.6.3 다형성과 관련 개념 ... 194
3.7 분리 컴파일 [CD-30] ... 198
3.7.1 C의 분리 컴파일 [CD-31]
3.7.2 패키지와 자동 헤더 추론 [CD-34]
3.7.3 모듈 계층 [CD-35]
3.8 정리 ... 199
3.9 연습문제 ... 200
3.10 탐구문제 ... 209
3.11 참고자료 ... 212
04장 의미 분석 ... 213
4.1 의미 분석기의 역할 ... 214
4.2 속성 문법 ... 218
4.3 속성 평가 ... 220
4.4 동작 루틴 ... 232
4.5 속성을 위한 저장 공간의 관리 [CD-37] ... 234
4.5.1 상향식 평가 [CD-37]
4.5.2 하향식 평가 [CD-42]
4.6 구문 트리 장식 ... 235
4.7 정리 ... 241
4.8 연습문제 ... 242
4.9 탐구문제 ... 248
4.10 참고자료 ... 250
05장 타겟 머신의 구조 ... 251
5.1 메모리 계층 ... 252
5.2 자료 표현 ... 255
5.2.1 컴퓨터 산술 [CD-49] ... 256
5.3 명령어 집합 구조 ... 257
5.3.1 주소 지정 방식 ... 258
5.3.2 조건과 분기 ... 258
5.4 구조와 구현 ... 261
5.4.1 마이크로프로그래밍 ... 262
5.4.2 마이크로프로세서 ... 263
5.4.3 RISC ... 264
5.4.4 구조의 두 가지 예: x86과 MIPS [CD-55] ... 265
5.4.5 유사 어셈블리 표기법 ... 266
5.5 최신 프로세서를 위한 컴파일 ... 267
5.5.1 파이프라인을 꽉 차게 유지 ... 268
5.5.2 레지스터 할당 ... 273
5.6 정리 ... 279
5.7 연습문제 ... 281
5.8 탐구문제 ... 285
5.9 참고자료 ... 288
2부 프로그래밍 언어의 핵심 요소 ... 290
06장 제어 흐름 ... 293
6.1 수식의 값 계산 ... 294
6.1.1 우선순위와 결합법칙 ... 296
6.1.2 대입 ... 298
6.1.3 초기화 ... 307
6.1.4 수식 내의 순서 결정 ... 310
6.1.5 지름길 계산 ... 313
6.2 구조화된 흐름과 구조화되지 않은 흐름 ... 316
6.2.1 goto의 구조화된 대체자 ... 317
6.2.2 재개 ... 320
6.3 열거 ... 321
6.4 선택 ... 323
6.4.1 지름길화된 조건 ... 324
6.4.2 Case/Switch문 ... 326
6.5 반복 ... 333
6.5.1 열거 제어형 루프 ... 333
6.5.2 루프의 조합 ... 340
6.5.3 반복자 ... 341
6.5.4 아이콘의 생성기 [CD-62] ... 348
6.5.5 논리 제어형 루프 ... 348
6.6 재귀 ... 352
6.6.1 반복과 재귀 ... 352
6.6.2 적용 순서와 정규 순서 값 계산 ... 356
6.7 비결정성 [CD-65] ... 360
6.8 정리 ... 361
6.9 연습문제 ... 363
6.10 탐구문제 ... 371
6.11 참고자료 ... 373
07장 자료형 ... 375
7.1 유형 시스템 ... 376
7.1.1 유형 검사 ... 377
7.1.2 다형성 ... 377
7.1.3 유형의 정의 ... 379
7.1.4 유형의 분류 ... 380
7.1.5 직교성 ... 387
7.2 유형 검사 ... 389
7.2.1 유형 등가 ... 390
7.2.2 유형 호환 ... 397
7.2.3 유형 추론 ... 402
7.2.4 ML의 유형 시스템 [CD-71] ... 405
7.3 레코드(구조체)와 베리언트(공용체) ... 406
7.3.1 구문과 연산 ... 406
7.3.2 메모리 배치와 그 효과 ... 408
7.3.3 with문 [CD-81] ... 411
7.3.4 베리언트 레코드 ... 412
7.4 배열 ... 420
7.4.1 구문과 연산 ... 421
7.4.2 차원, 범위와 할당 ... 425
7.4.3 메모리 배치 ... 430
7.5 문자열 ... 438
7.6 집합 ... 439
7.7 포인터와 재귀형 ... 441
7.7.1 구문과 연산 ... 442
7.7.2 댕글링 참조 ... 451
7.7.3 가비지 컬렉션 ... 455
7.8 리스트 ... 462
7.9 파일과 입력/출력 [CD-65] ... 465
7.9.1 상호작용적 I/O [CD-85]
7.9.2 파일 기반의 I/O [CD-86]
7.9.3 텍스트 I/O [CD-88]
7.10 등가 검사와 대입 ... 466
7.11 정리 ... 469
7.12 연습문제 ... 471
7.13 탐구문제 ... 479
7.14 참고자료 ... 480
08장 서브루틴과 제어 추상화 ... 483
8.1 스택 배치의 복습 ... 484
8.2 호출 순서 ... 486
8.2.1 디스플레이 [CD-97] ... 489
8.2.2 사례 연구: MIPS상의 C, x86상의 파스칼 [CD-101] ... 490
8.2.3 레지스터 윈도우 [CD-109] ... 491
8.2.4 인라인 확장 ... 491
8.3 매개변수 전달 ... 494
8.3.1 매개변수 방식 ... 495
8.3.2 이름에 의한 호출 [CD-112] ... 501
8.3.3 특별한 목적의 매개변수 ... 504
8.3.4 함수 복귀 ... 510
8.4 제네릭 서브루틴과 모듈 ... 512
8.4.1 구현 선택 사항 ... 513
8.4.2 제네릭 매개변수의 제약 조건 ... 516
8.4.3 묵시적인 인스턴스화 ... 518
8.4.4. C++, 자바, C에서의 제네릭 [CD-115] ... 519
8.5 예외 처리 ... 520
8.5.1 예외의 정의 ... 522
8.5.2 예외 전파 ... 524
8.5.3 예: 재귀 하강 구문 분석기에서 단계 수준 복구 ... 528
8.5.4 예외의 구현 ... 529
8.6 동시 실행 루틴 ... 532
8.6.1 스택 할당 ... 535
8.6.2 전이 ... 536
8.6.3 반복자의 구현 [CD-126] ... 538
8.6.4 분리적 이벤트 시뮬레이션 [CD-131] ... 538
8.7 정리 ... 539
8.8 연습문제 ... 540
8.9 탐구문제 ... 549
8.10 참고자료 ... 551
09장 자료 추상화와 객체지향 ... 553
9.1 객체지향 프로그래밍 ... 555
9.2 캡슐화와 상속 ... 566
9.2.1 모듈 ... 567
9.2.2 클래스 ... 570
9.2.3 유형 확장 ... 572
9.3 초기화와 종결화 ... 575
9.3.1 생성자의 선택 ... 576
9.3.2 참조와 값 ... 578
9.3.3 실행 순서 ... 581
9.3.4 가비지 컬렉션 ... 583
9.4 동적 메소드 바인딩 ... 584
9.4.1 가상과 비가상 메소드 ... 587
9.4.2 추상 클래스 ... 588
9.4.3 멤버 검색 ... 589
9.4.4 다형성 ... 593
9.4.5 클로저 ... 596
9.5 다중 상속 [CD-135] ... 599
9.5.1 의미적 모호성 [CD-138]
9.5.2 중복 상속 [CD-141]
9.5.3 공유 상속 [CD-142]
9.5.4 혼합 상속 [CD-144]
9.6 객체지향 프로그래밍 다시 보기 ... 600
9.6.1 스몰토크의 객체 모델 [CD-148] ... 601
9.7 정리 ... 601
9.8 연습문제 ... 603
9.9 탐구문제 ... 608
9.10 참고자료 ... 609
3부 다른 관점에서 바라본 프로그래밍 모델 ... 612
10장 함수형 언어 ... 615
10.1 역사적 기원 ... 616
10.2 함수형 프로그래밍의 개념 ... 618
10.3 스킴 복습/개관 ... 620
10.3.1 바인딩 ... 623
10.3.2 리스트와 숫자 ... 624
10.3.3 동일성 검사와 검색 ... 624
10.3.4 제어 흐름과 대입 ... 625
10.3.5 리스트로서의 프로그램 ... 627
10.3.6 확장된 예: DFA 시뮬레이션 ... 630
10.4 계산 순서 다시 보기 ... 632
10.4.1 엄밀성과 게으른 계산 ... 634
10.4.2 I/O: 스트림과 모나드 ... 636
10.5 고차 함수 ... 639
10.6 이론적 기초 [CD-152] ... 643
10.6.1 람다 연산 [CD-154]
10.6.2 제어 흐름 [CD-158]
10.6.3 구조체 [CD-160]
10.7 한눈에 보는 함수형 프로그래밍 ... 643
10.8 정리 ... 646
10.9 연습문제 ... 647
10.10 탐구문제 ... 653
10.11 참고자료 ... 654
11장 논리형 언어 ... 657
11.1 논리형 프로그래밍의 개념 ... 658
11.2 프롤로그 ... 659
11.2.1 도출과 단일화 ... 661
11.2.2 리스트 ... 662
11.2.3 산술 ... 663
11.2.4 검색/실행 순서 ... 664
11.2.5 확장된 예P: Tic-Tac-Toe ... 667
11.2.6 명령형 제어 흐름 ... 670
11.2.7 데이터베이스 조작 ... 673
11.3 이론적 기초 [CD-163] ... 678
11.3.1 절 형태 [CD-164]
11.3.2 한계점 [CD-165]
11.3.3 스콜렘화 [CD-167]
11.4 한눈에 보는 논리형 프로그래밍 ... 679
11.4.1 다룰 수 없는 일부 논리 ... 679
11.4.2 실행 순서 ... 679
11.4.3 부정과 '닫힌 세계' 가정 ... 681
11.5 정리 ... 683
11.6 연습문제 ... 684
11.7 탐구문제 ... 687
11.8 참고자료 ... 689
12장 병행 처리 ... 691
12.1 배경과 동기 ... 692
12.1.1 간단한 역사 ... 693
12.1.2 다중 스레드 프로그램의 경우 ... 695
12.1.3 다중 프로세서 구조 ... 700
12.2 병행 프로그래밍 기초 ... 704
12.2.1 통신과 동기화 ... 704
12.2.2 언어와 라이브러리 ... 706
12.2.3 스레드 생성 구문 ... 707
12.2.4 스레드 구현 ... 717
12.3 공유 메모리 ... 724
12.3.1 바쁜 대기 동기화 ... 724
12.3.2 스케줄러의 구현 ... 728
12.3.3 세마포어 ... 732
12.3.4 감독자 ... 735
12.3.5 조건 임계 영역 ... 739
12.3.6 묵시적 동기화 ... 745
12.4 메시지 전달 ... 749
12.4.1 통신 상대의 명명 ... 749
12.4.2 전송 ... 753
12.4.3 수신 ... 758
12.4.4 원격 프로시저 호출 ... 764
12.5 정리 ... 768
12.6 연습문제 ... 770
12.7 탐구문제 ... 777
12.8 참고자료 ... 778
13장 스크립팅 언어 ... 781
13.1 스크립팅 언어란 ... 782
13.1.1 공통적인 특징 ... 784
13.2 문제 영역 ... 788
13.2.1 쉘 언어 ... 788
13.2.2 문서 처리와 보고서 생성 ... 796
13.2.3 수학과 통계 ... 801
13.2.4 접착 언어와 범용 스크립팅 ... 802
13.2.5 확장 언어 ... 810
13.3 월드 와이드 웹 스크립팅 ... 814
13.3.1 CGI 스크립트 ... 815
13.3.2 내장형 서버 측 스크립트 ... 818
13.3.3 클라이언트 측 스크립트 ... 821
13.3.4 자바 애플릿 ... 823
13.3.5 XSLT ... 825
13.4 혁신적인 기능 ... 838
13.4.1 이름과 유효 범위 ... 838
13.4.2 문자열과 패턴 처리 ... 844
13.4.3 자료형 ... 852
13.4.4 객체지향 ... 858
13.5 정리 ... 866
13.6 연습문제 ... 868
13.7 탐구문제 ... 874
13.8 참고자료 ... 875
4부 로우레벨로 되짚어본 프로그램의 비밀 ... 878
14장 실행 가능한 프로그램 작성 ... 881
14.1 후단 컴파일러 구조 ... 881
14.1.1 단계 집합 ... 882
14.1.2 단계와 패스 ... 886
14.2 중간 형태 [CD-169] ... 886
14.2.1 다이애나 [CD-169]
14.2.2 GNU RTL [CD-172]
14.3 코드 생성 ... 889
14.3.1 속성 문법의 예 ... 890
14.3.2 레지스터 할당 ... 892
14.4 주소 공간 구조 ... 895
14.5 어셈블리 ... 897
14.5.1 명령어 생성 ... 899
14.5.2 이름에 주소 할당 ... 901
14.6 링킹 ... 902
14.6.1 재배치와 이름 결정 ... 904
14.6.2 유형 검사 ... 904
14.7 동적 링킹 [CD-175] ... 906
14.7.1 위치 독립적 코드 [CD-175]
14.7.2 완전히 동적인(게으른) 링킹 [CD-177]
14.8 정리 ... 907
14.9 연습문제 ... 909
14.10 탐구문제 ... 911
14.11 참고자료 ... 913
15장 코드 개선 [CD-180] ... 915
15.1 코드 개선의 여러 단계 [CD-182]
15.2 국소적 최적화 [CD-184]
15.3 기본 블록에서의 중복 제거 [CD-187]
15.3.1 실제 예 [CD-188]
15.3.2 값 번호 지정 [CD-191]
15.4 전역 중복과 자료 흐름 분석 [CD-196]
15.4.1 SSA 형태와 전역 값 번호 지정 [CD-196]
15.4.2 전역 공통 하위 수식 제거 [CD-200]
15.5 루프 개선 Ⅰ [CD-207]
15.5.1 루프 불변식 [CD-207]
15.5.2 귀납 변수 [CD-210]
15.6 명령어 스케줄링 [CD-212]
15.7 루프 개선 Ⅱ [CD-216]
15.7.1 루프 펼치기와 소프트웨어 파이프라이닝 [CD-217]
15.7.2 루프 재정렬 [CD-221]
15.8 레지스터 할당 [CD-228]
15.9 정리 [CD-233]
15.10 연습문제 [CD-234]
15.11 탐구문제 [CD-239]
15.12 참고자료 [CD-241]
부록 A 이 책에서 다룬 프로그래밍 언어 ... 917
부록 B '설계와 구현' 목차 ... 929
부록 C '예' 목차 ... 935
참고자료 ... 951
찾아보기 ... 971
부록 CD 활용 방법 ... 1004