logo
logo
x
바코드검색
BOOKPRICE.co.kr
책, 도서 가격비교 사이트
바코드검색

인기 검색어

실시간 검색어

검색가능 서점

도서목록 제공

Crafting Interpreters 로버트 나이스트롬의 인터프리터 in Java, C

Crafting Interpreters 로버트 나이스트롬의 인터프리터 in Java, C

(내 손으로 직접 밑바닥부터 만들며 배우는 리얼 인터프리터와 컴파일러의 세계)

로버트 나이스트롬 (지은이), 이일웅 (옮긴이)
  |  
길벗
2023-11-30
  |  
55,000원

일반도서

검색중
서점 할인가 할인률 배송비 혜택/추가 실질최저가 구매하기
알라딘 49,500원 -10% 0원 2,750원 46,750원 >
yes24 로딩중
교보문고 로딩중
영풍문고 로딩중
인터파크 로딩중
11st 로딩중
G마켓 로딩중
쿠팡 로딩중
쿠팡로켓 로딩중
notice_icon 검색 결과 내에 다른 책이 포함되어 있을 수 있습니다.

중고도서

검색중
로딩중

e-Book

검색중
서점 정가 할인가 마일리지 실질최저가 구매하기
aladin 44,000원 -10% 2200원 37,400원 >

책 이미지

Crafting Interpreters 로버트 나이스트롬의 인터프리터 in Java, C

책 정보

· 제목 : Crafting Interpreters 로버트 나이스트롬의 인터프리터 in Java, C (내 손으로 직접 밑바닥부터 만들며 배우는 리얼 인터프리터와 컴파일러의 세계)
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 언어 > 자바
· ISBN : 9791140707386
· 쪽수 : 816쪽

책 소개

매일 사용하고 있는 프로그래밍 언어가 어떻게 설계되고 구현되는지 알고 싶은가? 프로그래밍 언어가 어떻게 작동하고, 바이트 코드로 컴파일되고, 가상 머신에서 실행되는지에 관심이 있는가? 이 책은 모든 기능을 갖춘 효율적인 스크립팅 언어를 구현하기 위해 알아야 할 모든 것을 담고 있다.

목차

1부 | 환영한다!

1장 들어가기
__1.1 왜 이런 걸 배우는가?
____1.1.1 미니 언어는 곳곳에 있다
____1.1.2 언어는 훌륭한 연습이다
____1.1.3 한 가지 더
__1.2 이 책의 구성
____1.2.1 코드
____1.2.2 스니펫
____1.2.3 어사이드
____1.2.4 연습 문제
____1.2.5 디자인 노트
__1.3 첫 번째 인터프리터
__1.4 두 번째 인터프리터
연습 문제
디자인 노트 | 언어 이름 짓기

2장 인터프리터 원정대
__2.1 언어의 구성 요소
____2.1.1 스캐닝
____2.1.2 파싱
____2.1.3 정적 분석
____2.1.4 중간 표현
____2.1.5 최적화
____2.1.6 코드 생성
____2.1.7 가상 머신
____2.1.8 런타임
__2.2 지름길과 대체 경로
____2.2.1 싱글 패스 컴파일러
____2.2.2 트리 탐색 인터프리터
____2.2.3 트랜스파일러
____2.2.4 JIT 컴파일
__2.3 컴파일러와 인터프리터
__2.4 여행을 떠나자!
연습 문제

3장 록스 언어
__3.1 안녕, 록스
__3.2 하이레벨 언어
____3.2.1 동적 타이핑
____3.2.2 자동 메모리 관리
__3.3 데이터 타입
__3.4 표현식
____3.4.1 산술
____3.4.2 비교와 동등성
____3.4.3 논리 연산자
____3.4.4 우선순위와 그룹핑
__3.5 문장
__3.6 변수
__3.7 제어 흐름
__3.8 함수
____3.8.1 클로저
__3.9 클래스
____3.9.1 객체 지향 언어를 추구해야 할 이유가 있을까?
____3.9.2 록스는 왜 객체 지향 언어로 만들었나?
____3.9.3 클래스냐 프로토타입이냐
____3.9.4 록스의 클래스
____3.9.5 인스턴스화 및 초기화
____3.9.6 상속
__3.10 표준 라이브러리
연습 문제
디자인 노트 | 표현식과 문장

2부 | 트리 탐색 인터프리터

4장 스캐닝
__4.1 인터프리터 프레임워크
____4.1.1 에러 처리
__4.2 렉심과 토큰
____4.2.1 토큰 타입
____4.2.2 리터럴 값
____4.2.3 위치 정보
__4.3 정규 언어와 표현식
__4.4 스캐너 클래스
__4.5 렉심 식별하기
____4.5.1 렉시컬 에러 090
____4.5.2 연산자 091
__4.6 길이가 긴 렉심
____4.6.1 문자열 리터럴
____4.6.2 숫자 리터럴
__4.7 예약어와 식별자
연습 문제
디자인 노트 | 암묵적 세미콜론

5장 코드 표현
__5.1 컨텍스트 자유 문법
____5.1.1 문법 규칙
____5.1.2 표기법 개선
____5.1.3 록스 표현식 문법
__5.2 구문 트리 구현
____5.2.1 무지향성 객체
____5.2.2 트리 메타프로그래밍
__5.3 트리 다루기
____5.3.1 표현식 문제
____5.3.2 비지터 패턴
____5.3.3 표현식에 비지터를 적용
__5.4 (적당히) 예쁜 출력기
연습 문제

6장 표현식 파싱
__6.1 모호함과 파싱 게임
__6.2 재귀 하향 파싱
____6.2.1 파서 클래스
__6.3 구문 에러
____6.3.1 패닉 모드 에러 복구
____6.3.2 패닉 모드 진입
____6.3.3 재귀 하향 파서 동기화
__6.4 파서 연결
연습 문제
디자인 노트 | 로직 vs 역사

7장 표현식 평가
__7.1 값을 표현하기
__7.2 표현식 평가
____7.2.1 리터럴 평가
____7.2.2 괄호 평가
____7.2.3 단항식 평가
____7.2.4 참과 거짓
____7.2.5 이항 연산자 평가
__7.3 런타임 에러
____7.3.1 런타임 에러 감지
__7.4 인터프리터 연결
____7.4.1 런타임 에러 리포팅
____7.4.2 인터프리터 실행
연습 문제
디자인 노트 | 정적 타이핑과 동적 타이핑

8장 문장과 상태
__8.1 문장
____8.1.1 문장 구문 트리
____8.1.2 문장 파싱
____8.1.3 문장 실행
__8.2 글로벌 변수
____8.2.1 변수 구문
____8.2.2 변수 파싱
__8.3 환경
____8.3.1 글로벌 변수의 인터프리팅
__8.4 할당
____8.4.1 할당 구문
____8.4.2 할당 시맨틱
__8.5 스코프
____8.5.1 중첩과 섀도잉
____8.5.2 블록 구문과 시맨틱
연습 문제
디자인 노트 | 암묵적 변수 선언

9장 제어 흐름
__9.1 튜링 기계(개요)
__9.2 조건부 실행
__9.3 논리 연산자
__9.4 while 루프
__9.5 for 루프
____9.5.1 디슈가링
연습 문제
디자인 노트 | 구문 슈가 범벅

10장 함수
__10.1 함수 호출
____10.1.1 최대 인수 개수
____10.1.2 함수 호출 인터프리팅
____10.1.3 호출 타입 에러
____10.1.4 애리티 체크
__10.2 네이티브 함수
____10.2.1 시간 측정
__10.3 함수 선언
__10.4 함수 객체
____10.4.1 함수 선언 인터프리팅
__10.5 리턴문
____10.5.1 호출에서 리턴
__10.6 로컬 함수와 클로저
연습 문제

11장 리졸빙과 바인딩
__11.1 정적 스코프
____11.1.1 스코프와 가변 환경
____11.1.2 영속적 환경
__11.2 시맨틱 분석
____11.2.1 변수 레졸루션 패스
__11.3 리졸버 클래스
____11.3.1 블록 리졸빙
____11.3.2 변수 선언 리졸빙
____11.3.3 변수식 리졸빙
____11.3.4 할당식 리졸빙
____11.3.5 함수 선언 리졸빙
____11.3.6 기타 구문 트리 노드의 리졸빙
__11.4 리졸브된 변수의 인터프리팅
____11.4.1 리졸브된 변수 액세스
____11.4.2 리졸브된 변수 할당
____11.4.3 리졸버 실행
__11.5 레졸루션 에러
____11.5.1 잘못된 리턴 에러
연습 문제

12장 클래스
__12.1 OOP와 클래스
__12.2 클래스 선언
__12.3 인스턴스 생성
__12.4 인스턴스 프로퍼티
____12.4.1 겟 표현식
____12.4.2 셋 표현식
__12.5 클래스 메서드
__12.6 this
____12.6.1 잘못된 this 용례
__12.7 생성자와 초기자
____12.7.1 init() 직접 호출
____12.7.2 init()에서 리턴
연습 문제
디자인 노트 | 프로토타입과 파워

13장 상속
__13.1 수퍼클래스와 서브클래스
__13.2 메서드 상속
__13.3 수퍼클래스 메서드 호출
____13.3.1 구문
____13.3.2 시맨틱
____13.3.3 잘못된 super 용례
__13.4 마무리
연습 문제

3부 | 바이트코드 가상 머신

14장 바이트코드 청크
__14.1 바이트코드란?
____14.1.1 AST 탐색의 문제점은?
____14.1.2 그냥 네이티브 코드로 컴파일하면?
____14.1.3 바이트코드란?
__14.2 시작하기
__14.3 명령어 청크
____14.3.1 동적 명령어 배열
__14.4 청크 디셈블링
__14.5 상수
____14.5.1 값 표현
____14.5.2 값 배열
____14.5.3 상수 명령어
__14.6 줄 정보
____14.6.1 줄 정보 디셈블링
연습 문제
디자인 노트 | 개발 중인 언어를 테스트

15장 가상 머신
__15.1 명령어 실행 머신
____15.1.1 명령어 실행
____15.1.2 실행 추적
__15.2 값 스택 조작기
____15.2.1 VM의 스택
____15.2.2 스택 트레이스
__15.3 산술 계산기
____15.3.1 이항 연산자
연습 문제
디자인 노트 | 레지스터 기반의 바이트코드

16장 온 디맨드 스캐닝
__16.1 인터프리터 시동 걸기
____16.1.1 컴파일 파이프라인 열기
____16.1.2 스캐너의 스캐닝
__16.2 한 번에 토큰 하나씩
____16.2.1 토큰 스캐닝
__16.3 록스의 렉시컬 문법
____16.3.1 공백 문자
____16.3.2 주석
____16.3.3 리터럴 토큰
__16.4 식별자와 키워드
____16.4.1 트라이와 상태 기계
연습 문제

17장 표현식 컴파일
__17.1 싱글 패스 컴파일
__17.2 토큰 파싱
____17.2.1 구문 에러 처리
__17.3 바이트코드 내보내기
__17.4 전위식 파싱
____17.4.1 토큰 파서
____17.4.2 괄호로 그룹핑
____17.4.3 단항 음수화
__17.5 중위식 파싱
__17.6 프랫 파서
____17.6.1 우선순위에 따라 파싱
__17.7 청크 덤프
연습 문제
디자인 노트 | 파싱은 파싱일 뿐

18장 값 타입
__18.1 태그 있는 공용체
__18.2 록스의 값과 C의 값
__18.3 동적 타입 숫자
____18.3.1 단항 부정과 런타임 에러
____18.3.2 이항 산술 연산자
__18.4 두 가지 새로운 타입
____18.4.1 논리 not과 거짓
____18.4.2 동등/비교 연산자
연습 문제

19장 문자열
__19.1 값과 객체
__19.2 구조체 상속
__19.3 문자열
__19.4 문자열 연산
____19.4.1 문자열 연결
__19.5 객체 해제
연습 문제
디자인 노트 | 문자열 인코딩

20장 해시 테이블
__20.1 버킷 배열
____20.1.1 로드 팩터 및 래핑된 키
__20.2 충돌 해결
____20.2.1 개별 체이닝
____20.2.2 오픈 어드레싱
__20.3 해시 함수
__20.4 해시 테이블
____20.4.1 문자열 해싱
____20.4.2 엔트리 삽입
____20.4.3 할당 및 크기 조정
____20.4.4 값 조회
____20.4.5 엔트리 삭제
____20.4.6 툼스톤 개수 세기
__20.5 문자열 인터닝
연습 문제

21장 글로벌 변수
__21.1 문장
____21.1.1 print 문
____21.1.2 표현문
____21.1.3 에러 동기화
__21.2 변수 선언
__21.3 변수 읽기
__21.4 할당
연습 문제

22장 로컬 변수
__22.1 로컬 변수 표현
__22.2 블록문
__22.3 로컬 변수 선언
__22.4 로컬 변수 사용
____22.4.1 로컬 변수 해석
____22.4.2 다른 스코프 엣지 케이스
연습 문제

23장 진격과 후퇴
__23.1 if 문
____23.1.1 else 절
__23.2 논리 연산자
____23.2.1 논리 or 연산자
__23.3 while 문
__23.4 for 문
____23.4.1 초기자 절
____23.4.2 조건절
____23.4.3 증분절
연습 문제
디자인 노트 | goto가 그렇게 해로울까?

24장 호출과 함수
__24.1 함수 객체
__24.2 함수 객체로 컴파일
____24.2.1 컴파일 타임에 함수 생성
__24.3 호출 프레임
____24.3.1 로컬 변수 할당
____24.3.2 리턴 주소
____24.3.3 호출 스택
__24.4 함수 선언
____24.4.1 컴파일러 스택
____24.4.2 함수 매개변수
__24.5 함수 호출
____24.5.1 인수를 매개변수에 바인딩
____24.5.2 런타임 에러 체크
____24.5.3 스택 트레이스 출력
____24.5.4 함수에서 리턴
__24.6 리턴문
__24.7 네이티브 함수
연습 문제

25장 클로저
__25.1 클로저 객체
____25.1.1 클로저 객체로 컴파일
____25.1.2 함수 선언 해석
__25.2 업밸류
____25.2.1 업밸류 컴파일
____25.2.2 업밸류 플랫화
__25.3 업밸류 객체
____25.3.1 클로저에서의 업밸류
__25.4 클로즈드 업밸류
____25.4.1 값과 변수
____25.4.2 업밸류 클로징
____25.4.3 오픈 업밸류 추적
____25.4.4 런타임에 업밸류 클로징
연습 문제
디자인 노트 | 루프 변수 클로징

26장 가비지 수집
__26.1 도달성
__26.2 마크-스윕 가비지 수집
____26.2.1 가비지 수집
____26.2.2 디버그 로깅
__26.3 루트 마킹
____26.3.1 불분명한 루트
__26.4 객체 참조 추적
____26.4.1 색 추상화
____26.4.2 회색 객체 워크리스트
____26.4.3 회색 객체 처리
__26.5 미사용 객체 스위핑
____26.5.1 약한 참조와 문자열 풀
__26.6 수집은 언제 하나?
____26.6.1 레이턴시와 스루풋
____26.6.2 자동 조정 힙
__26.7 가비지 수집 버그
____26.7.1 상수 테이블에 추가
____26.7.2 문자열 인터닝
____26.7.3 문자열 연결
연습 문제
디자인 노트 | 세대별 수집기

27장 클래스와 인스턴스
__27.1 클래스 객체
__27.2 클래스 선언
__27.3 클래스 인스턴스
__27.4 겟/셋 표현식
____27.4.1 게터/세터 표현식 해석
연습 문제

28장 메서드와 초기자
__28.1 메서드 선언
____28.1.1 메서드 표현
____28.1.2 메서드 선언 컴파일
____28.1.3 메서드 선언 실행
__28.2 메서드 참조
____28.2.1 바운드 메서드
____28.2.2 메서드 액세스
____28.2.3 메서드 호출
__28.3 this
____28.3.1 this 오용 사례
__28.4 인스턴스 초기자
____28.4.1 초기자 호출
____28.4.2 초기자 리턴값
____28.4.3 잘못된 초기자 리턴
__28.5 호출 최적화
____28.5.1 필드 호출
연습 문제
디자인 노트 | 참신성 예산

29장 메서드와 초기자
__29.1 메서드 상속
____29.1.1 상속 실행
____29.1.2 이상한 수퍼클래스
__29.2 수퍼클래스 저장
____29.2.1 수퍼클래스의 로컬 변수
__29.3 수퍼 호출
____29.3.1 수퍼 액세스 실행
____29.3.2 수퍼 호출을 더 빠르게
__29.4 완전한 가상 머신
연습 문제

30장 최적화
__30.1 성능 측정
____30.1.1 벤치마크
____30.1.2 프로파일링
__30.2 해시 테이블 프로빙을 더 빠르게
____30.2.1 느린 키 래핑
__30.3 NaN 박싱
____30.3.1 숫자는 무엇이고, 숫자가 아닌 것은 무엇인가?
____30.3.2 조건부 지원
____30.3.3 숫자
____30.3.4 nil과 true/false
____30.3.5 객체
____30.3.6 Value 함수
____30.3.7 성능 평가
__30.4 다음 도착지는?
연습 문제

4부 | 부록

A1장 록스의 전체 문법
__A1.1 구문 문법
____A1.1.1 선언
____A1.1.2 문장
____A1.1.3 표현식
____A1.1.4 유틸리티 규칙
__A1.2 렉시컬 문법

A2장 제이록스의 AST 생성기로 만든 자바 클래스 목록
__A2.1 표현식
____A2.1.1 할당 표현식
____A2.1.2 이항 표현식
____A2.1.3 호출 표현식
____A2.1.4 겟 표현식
____A2.1.5 그룹핑 표현식
____A2.1.6 리터럴 표현식
____A2.1.7 논리 표현식
____A2.1.8 셋 표현식
____A2.1.9 super 표현식
____A2.1.10 this 표현식
____A2.1.11 단항 표현식
____A2.1.12 변수 표현식
__A2.2 문장
____A2.2.1 블록문
____A2.2.2 클래스 문장
____A2.2.3 표현문
____A2.2.4 함수 문장
____A2.2.5 If 문
____A2.2.6 print 문
____A2.2.7 return 문
____A2.2.8 변수 문장
____A2.2.9 while 문

B장 예제 코드 실습 안내 by 옮긴이
____B.1.1 시스템 요구 사항
____B.1.2 압축 파일 해제
____B.1.3 환경 변수(PATH)에 컴파일러 경로 추가
____B.1.4 개발 환경(Eclipse) 실행
____B.1.5 맺음말

찾아보기

저자소개

로버트 나이스트롬 (지은이)    정보 더보기
20년 간 전문 프로그래머로 활동해왔으며, 그 중 절반 정도는 게임 분야에서 일했다. 일렉트로닉 아츠(Electronic Arts)에서 대작 '매든(Madden)'부터 '헨리 하츠워스(Henry Hatsworth)의 괴상한 모험' 같은 소규모 타이틀까지 다양한 게임을 개발했고, 이 시절 『게임 프로그래밍 패턴』(한빛미디어, 2016)을 집필했다. 개인 블로그를 방문하면 재치와 기지가 넘치는 흥미로운 그의 글을 접할 수 있다. - 지은이 블로그: https://journal.stuffwithstuff.com - 이 책의 블로그: https://craftinginterpreters.com
펼치기
이일웅 (옮긴이)    정보 더보기
20년 가까이 국내외 엔터프라이즈 현장에서 자바 전문 풀스택 개발자, 소프트웨어 아키텍트로 프로젝트에 참여해왔다. 어느덧 50대를 바라보는 중년 아재가 되었지만 아직도 기술이 궁금한 엔지니어다. 20여 종의 IT 전문서를 번역하며 동료, 후배 개발자들과 지식과 경험을 나누는 일에도 힘쓰고 있다. 집에서는 세 여인의 분에 넘치는 사랑을 받고 사는, 세상에서 제일 행복한 딸바보 아빠다.
펼치기

책속에서



이 포스팅은 쿠팡 파트너스 활동의 일환으로,
이에 따른 일정액의 수수료를 제공받습니다.
도서 DB 제공 : 알라딘 서점(www.aladin.co.kr)
최근 본 책