목차
CHAPTER 01 소개
1.1 원리 = 2
1.2 패러다임 = 4
1.3 주요 개념 = 6
1.4 역사 = 7
1.5 언어의 설계에 대하여 = 14
1.5.1 설계 제약사항 = 14
1.5.2 결과와 목표 = 18
1.6 컴파일러와 가상기계 = 22
1.7 복습 = 25
연습문제 = 27
CHAPTER 02 구문구조
2.1 문법 = 30
2.1.1 BNF 문법 = 31
2.1.2 유도 = 33
2.1.3 파스 트리 = 35
2.1.4 결합성과 우선순위 = 37
2.1.5 모호한 문법 = 40
2.2 확장 BNF = 44
2.3 소규모 언어 Clite의 구문구조 = 47
2.3.1 어휘 구문구조 = 49
2.3.2 구체 구문구조 = 51
2.4 컴파일러와 실행기 = 55
2.5 구문구조와 의미구조의 연결 = 59
2.5.1 추상 구문 = 60
2.5.2 추상 구문 트리 = 62
2.5.3 Clite의 추상 구문 = 64
2.6 요약 = 66
연습문제 = 67
CHAPTER 03 어휘 및 구문 분석
3.1 촘스키 분류 = 70
3.2 어휘 분석 = 73
3.2.1 정규식 = 75
3.2.2 유한상태 오토마타 = 76
3.2.3 설계에서 코드로 = 81
3.3 구문 분석 = 85
3.3.1 미리 필요한 정의 = 86
3.3.2 재귀하향 파싱 = 91
3.4 요약 = 99
연습문제 = 100
CHAPTER 04 이름
4.1 구문 문제 = 104
4.2 변수 = 106
4.3 유효범위 = 108
4.4 기호표 = 112
4.5 주소의 도출 = 113
4.6 동적 유효범위 = 115
4.7 가시도 = 117
4.8 중복 = 118
4.9 수명 = 120
4.10 요약 = 122
연습문제 = 122
CHAPTER 05 타입
5.1 타입 오류 = 126
5.2 정적 및 동적 타입 결정 = 128
5.3 기본 타입 = 130
5.4 복합 타입 = 139
5.4.1 열거형 = 139
5.4.2 포인터 = 140
5.4.3 배열과 리스트 = 142
5.4.4 문자열 = 149
5.4.5 구조체 = 150
5.4.6 가변 레코드와 유니온 = 151
5.5 재귀적 데이터 타입 = 154
5.6 타입으로서의 함수 = 155
5.7 타입 동등성 = 156
5.8 하위 타입 = 158
5.9 다형성과 통칭 = 159
5.10 프로그래머가 정의한 타입 = 165
5.11 요약 = 165
연습문제 = 167
CHAPTER 06 타입 시스템
6.1 Clite를 위한 타입 시스템 = 171
6.2 자동 타입 변환 = 180
6.3 Clite 타입 시스템의 정형화 = 184
6.4 요약 = 187
연습문제 = 188
CHAPTER 07 의미구조
7.1 동기 = 192
7.2 계산식의 의미구조 = 193
7.2.1 표기법 = 193
7.2.2 결합성과 우선순위 = 196
7.2.3 단축계산 = 198
7.2.4 계산식의 의미 = 199
7.3 프로그램 상태 = 200
7.4 저장문의 의미구조 = 202
7.4.1 복식 저장 = 203
7.4.2 저장 명령문과 저장 계산식 = 203
7.4.3 복사 의미구조와 참조 의미구조 = 204
7.5 제어 흐름 의미구조 = 205
7.5.1 문장나열 = 205
7.5.2 조건문 = 200
7.5.3 루프 = 208
7.5.4 Go To 논쟁 = 210
7.6 입출력 의미구조 = 212
7.6.1 기본 개념 = 212
7.6.2 임의 접근 파일 = 219
7.6.3 입출력 오류 처리 의미구조 = 222
7.7 예외 처리의 의미구조 = 224
7.7.1 전략과 설계 쟁점 = 225
7.7.2 Ada, C++, Java의 예외 처리 = 228
7.7.3 예외와 단언 = 237
7.8 요약 = 242
연습문제 = 243
CHAPTER 08 의미의 해석
8.1 상태 전이와 부분 함수 = 245
8.2 Clite의 의미구조 = 247
8.2.1 프로그램의 의미구조 = 247
8.2.2 문장 의미구조 = 249
8.2.3 수식 의미구조 = 254
8.2.4 부작용을 가진 수식 = 259
8.3 동적으로 타입을 결정하는 언어의 의미구조 = 261
8.4 의미구조의 정형화 = 267
8.4.1 상태와 상태 전이 = 267
8.4.2 프로그램의 표기 의미구조 = 269
8.4.3 문장의 표기 의미구조 = 270
8.4.4 수식의 표기 의미구조 = 274
8.4.5 정형적인 의미구조 모델의 한계 = 277
8.5 요약 = 277
연습문제 = 278
CHAPTER 09 함수
9.1 기본 용어 = 282
9.2 함수 호출과 복귀 = 283
9.3 매개변수 = 284
9.4 매개변수 전달 방법 = 286
9.4.1 값 전달 방식 = 286
9.4.2 주소 전달 방식 = 288
9.4.3 값-결과 전달 방식과 결과 전달 방식 = 291
9.4.4 이름 전달 방식 = 292
9.4.5 Ada의 매개변수 전달 = 294
9.5 활성 레코드 = 294
9.6 재귀 함수 = 296
9.7 실행시간 스택 = 297
9.8 요약 = 300
연습문제 = 301
CHAPTER 10 함수의 구현
10.1 Clite에서의 함수의 선언과 호출 = 303
10.1.1 구체 구문구조 = 304
10.1.2 추상 구문구조 = 306
10.2 Clite 타입 체계의 완성 = 307
10.3 함수 호출과 복귀의 의미구조 = 310
10.3.1 void 타입이 아닌 함수들 = 312
10.3.2 부작용에 대한 추가적인 사항 = 313
10.4 타입과 의미구조의 정형적인 표현 = 314
10.4.1 Clite를 위한 타입 맵 = 314
10.4.2 Clite 타입 규칙의 정형화 = 316
10.4.3 Clite 의미구조의 정형화 = 318
10.5 요약 = 324
연습문제 = 325
CHAPTER 11 메모리 관리
11.1 힙 = 328
11.2 동적 배열의 구현 = 330
11.2.1 힙 관리 문제: 쓰레기 = 332
11.3 메모리 수거 = 333
11.3.1 참조횟수 계산 = 334
11.3.2 표시 후 청소 = 330
11.3.3 복사 수거 = 339
11.3.4 전략 비교 = 341
11.4 요약 = 342
연습문제 = 343
CHAPTER 12 명령중심 프로그래밍
12.1 명령중심 언어를 구성하는 것은 무엇인가? = 345
12.2 프로시저 추상화 = 348
12.3 계산식과 저장문 = 350
12.4 자료 구조를 위한 라이브러리 지원 = 352
12.5 명령중심 프로그래밍과 C = 354
12.5.1 일반적 특징 = 355
12.5.2 예제: Grep = 357
12.5.3 예제: 평균 = 358
12.5.4 예제: 미분 = 360
12.6 명령중심 프로그래밍과 Ada = 364
12.6.1 일반적 특징 = 365
12.6.2 예제: 평균 = 368
12.6.3 예제: 행렬 곱셈 = 369
12.7 명령중심 프로그래밍과 Perl = 370
12.7.1 일반적 특징 = 371
12.7.2 예제: Grep = 373
12.7.3 예제: 점수 메일 보내기 = 377
12.8 요약 = 381
연습문제 = 382
CHAPTER 13 객체지향 프로그래밍
13.1 전주곡: 추상 데이터 타입 = 383
13.2 객체 모델 = 389
13.2.1 클래스 = 390
13.2.2 가시성와 정보 은폐 = 393
13.2.3 상속 = 395
13.2.4 다중 상속 = 398
13.2.5 다형성 = 400
13.2.6 템플릿 = 403
13.2.7 추상 클래스 = 404
13.2.8 인터페이스 = 405
13.2.9 가상 메소드 테이블 = 408
13.2.10 실행시간에 타입 알아내기 = 410
13.2.11 투영 기능 = 411
13.3 Smalltalk = 413
13.3.1 일반 특성 = 413
13.3.2 예제: 다항식 = 418
13.3.3 예제: 복소수 = 419
13.3.4 예제: 은행 계좌 = 422
13.4 Java = 423
13.4.1 예제: 미분 = 424
13.4.2 예제: 되추적 = 426
13.5 Python = 434
13.5.1 일반 특성 = 435
13.5.2 예제: 다항식 = 437
13.5.3 예제: 분수 = 439
13.6 요약 = 441
연습문제 = 443
CHAPTER 14 함수형 프로그래밍
14.1 함수와 람다 계산법 = 448
14.2 Scheme = 453
14.2.1 계산식 = 454
14.2.2 계산식의 값 계산 = 455
14.2.3 리스트 = 456
14.2.4 기본값 = 460
14.2.5 제어 흐름 = 460
14.2.6 함수 정의 = 461
14.2.7 Let 계산식 = 464
14.2.8 예제: Clite의 의미구조 = 468
14.2.9 예제: 미분 = 472
14.2.10 예제: 여덟 여왕말 문제 = 474
14.3 Haskell = 481
14.3.1 소개 = 481
14.3.2 계산식 = 483
14.3.3 리스트와 조건제시 리스트 표기법 = 484
14.3.4 기본 타입과 값 = 488
14.3.5 제어 흐름 = 489
14.3.6 함수의 정의 = 490
14.3.7 튜플 = 494
14.3.8 예제: Clite의 의미구조 = 496
14.3.9 예제: 미분 = 500
14.3.10 예제: 여덟 여왕말 문제 = 503
14.4 요약 = 505
연습문제 = 506
CHAPTER 15 논리형 프로그래밍
15.1 논리와 혼 절 = 512
15.1.1 도출과 동일화 = 515
15.2 Prolog 논리형 프로그래밍 = 516
15.2.1 Prolog 프로그램의 구성 요소 = 516
15.2.2 Prolog 실행의 실제 = 526
15.3 Prolog 예제 = 531
15.3.1 미분 = 532
15.3.2 단어 퍼즐 = 533
15.3.3 자연어 처리 = 535
15.3.4 Clite의 의미구조 = 539
15.3.5 여덟 여왕말 문제 = 543
15.4 요약 = 546
연습문제 = 548
CHAPTER 16 이벤트 구동 프로그래밍
16.1 이벤트 구동 제어 = 552
16.1.1 MVC = 554
16.1.2 Java의 이벤트 = 555
16.1.3 Java GUI 응용 프로그램 = 558
16.2 이벤트 처리 = 560
16.2.1 마우스 클릭 = 560
16.2.2 마우스 움직임 = 562
16.2.3 단추 = 562
16.2.4 레이블, 텍스트 영역, 텍스트 필드 = 564
16.2.5 콤보 상자 = 566
16.3 세 가지 사례 = 568
16.3.1 간단한 GUl 인터페이스 = 568
16.3.2 Java 애플릿 설계 = 576
16.3.3 이벤트 구동 상호작용 게임 = 578
16.4 기타 이벤트 구동 응용 프로그램 = 586
16.4.1 ATM 기계 = 587
16.4.2 홈 시큐리티 시스템 = 588
16.5 요약 = 590
연습문제 = 591
CHAPTER 17 동시 프로그래밍
17.1 동시성 개념 = 596
17.1.1 역사와 정의 = 597
17.1.2 스레드 제어와 통신 = 598
17.1.3 경합과 교착 = 600
17.2 동기화 전략 = 603
17.2.1 세마포어 = 603
17.2.2 모니터 = 606
17.3 Java에서의 동기화 = 607
17.3.1 Java 스레드 = 607
17.3.2 예제 = 611
17.4 프로세스 간 통신 = 621
17.4.1 IP 주소, 포트, 소켓 = 622
17.4.2 클라이언트-서버 예제 = 622
17.5 다른 언어에서의 동시성 = 630
17.6 요약 = 632
연습문제 = 634
CHAPTER 18 프로그램의 정확성
18.1 공리 의미구조 = 639
18.1.1 기본 개념 = 640
18.1.2 저장문 규칙 = 644
18.1.2 결과 규칙 = 644
18.1.4 Max 함수의 정확성 = 645
18.1.5 루프가 있는 프로그램의 정확성 = 647
18.1.6 정형 기법의 전망 = 650
18.2 정형기법 도구: JML = 653
18.2.1 JML 예외 처리 = 660
18.3 객체지향 프로그램의 정확성 = 661
18.3.1 계약서 부착 설계 = 662
18.3.2 클래스 불변식 = 663
18.3.3 예제: 스택 응용 프로그램의 정확성 = 665
18.3.4 마지막 관찰 = 672
18.4 함수형 프로그램의 정확성 = 673
18.4.1 재귀와 귀납 = 673
18.4.2 구조적 귀납의 예 = 674
18.5 요약 = 678
연습문제 = 679
APPENDIX A : Clite 정의
A.1 Clite의 어휘 및 실제 구문구조 = 684
A.2 Clite의 추상 구문구조 = 685
A.3 Clite의 타입체계 = 686
A.4 Clite의 의미구조 = 687
A.5 Clite에 함수 추가하기 = 690
A.5.1 어휘 및 실제 구문구조 = 690
A.5.2 추상 구문구조 = 691
A.5.3 타입체계 = 691
A.5.4 의미구조 = 692
APPENDIX B : 이산 수학
B.1 집합과 관계 = 693
B.2 그래프 = 698
B.3 논리 = 700
B.4 추론 규칙과 직접 증명 = 705
B.5 귀납증명 = 707
찾아보기 = 709