메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

lex와 yacc, 개정판

lex와 yacc, 개정판

한빛미디어

번역서

절판

  • 저자 : 존 레빈 , 토니 매이슨 , 더그 브라운
  • 번역 : 임백준
  • 출간 : 2002-11-15
  • 페이지 : 495 쪽
  • ISBN : 8979142153
  • 물류코드 :1215
  • 초급 초중급 중급 중고급 고급
4점 (2명)
좋아요 : 12
입력 처리와 구문 해석의 만능 재주꾼
     컴파일러 제작 도구의 혁명 렉스와 야크 철저 분석

"존 레빈은 이 책에 더 풍부한 내용을 담아 놓았다. 드디어 다른 사람에게 권할 수 있는 훌륭한 책을 갖게 되어서 기쁘다." - 베른 팩손(플렉스 개발자)

『lex와 yacc』는 두 가지 중요한 유닉스 프로그래밍 도구인 렉스와 야크를 완전하게 다루고 있는 유일한 책이다. 렉스와 야크는 주로 컴파일러나 인터프리터 개발자가 사용하는 도구이지만, 효율적인 입력 처리와 구문 분석 및 파싱을 원하는 모든 응용프로그래머 또한 유용하게 사용할 수 있다. 특히, 그동안 입력을 분석, 검사, 변환하는 엔진을 별도로 개발해오던 프로그래머들은 이 책을 통해 막강한 두 도구에 대한 사용법과 수반 내용을 철저히 익힘으로써, 까다롭고 세부적인 부분에 신경쓸 필요 없이 간결하고 명확하게 개발할 수 있게 될 것이다.

개정판에서는 전체적으로 내용을 크게 개정하였으며, 예제들 또한 새롭게 추가하고 확장하였다. 추가적으로 4장과 5장을 메뉴 컴파일러와 SQL 문법을 구현하는 데 할애하여, 경험 많은 프로그래머들도 유용한 기법을 얻을 수 있도록 하였다. 부록에서는 렉스와 야크에 대한 명쾌한 레퍼런스와 다양한 오류 해결법을 제공하며, 유닉스와 MS-DOS에서 사용할 수 있는 주요 버전에 대해 다룬다.

주요 내용
  • 어휘 분석기와 파서의 개념 및 관계
  • 패턴 매칭 기법
  • 메뉴 생성 언어 개발 및 구축
  • SQL 파서
  • 상세한 렉스 및 야크 레퍼런스
  • 다양한 에러 해결 방법
  • 주요 버전별 특징 소개
존 레빈 저자

존 레빈

현재 유닉스와 컴파일러에 관한 글을 쓰고, 강의를 하며 컨설팅을 하고 있다. 그는 유즈넷 comp.compilers 토론 그룹의 중재자이다. 유닉스 버전 로터스 1-2-3과 노턴 유틸리티를 만드는 작업에 참여한 바 있으며 IBM RT PC용 AIX 설계자 중 한 사람이다. 1984년에 예일 대학에서 컴퓨터 과학 박사학위를 받았다.
토니 매이슨 저자

토니 매이슨

현재 분산 시스템 소프트웨어를 개발하는 회사인 트랜자르크사의 AFS 개발 팀 멤버다. 그 전에는 스탠포드 대학의 분산 시스템 그룹에서 분산 운영체제와 데이터 통신 분야에 대해서 일한 바 있다. 1987년에 시카고 대학에서 수학 학사학위를 받았다.
더그 브라운 저자

더그 브라운

오레곤주 비버튼시에 사는 컨설턴트이자 컨트랙터이다. 1977년 이래로 회로 시뮬레이션, 통합 그리고 테스팅을 위한 소프트웨어를 개발해 왔다. 더그는 오라일리에서 나온 또 다른 넛셀 핸드북인『C 프로그래머를 위한 C++』(한빛미디어, 2000)의 공동 저자이다. 어바나-샴페인에 있는 일리노이 주립대에서 1976년 전기공학 석사학위를 받았다.
임백준 역자

임백준

한빛미디어에서 『팟캐스트 나는 프로그래머다』, 『임백준의 아카 시작하기』, 『폴리글랏 프로그래밍』, 『누워서 읽는 퍼즐북』, 『프로그래밍은 상상이다』, 『뉴욕의 프로그래머』, 『소프트웨어 산책』, 『나는 프로그래머다』, 『누워서 읽는 알고리즘』, 『행복한 프로그래밍』을 출간했고, 로드북에서 『프로그래머 그 다음 이야기』를 출간했다. 삼성SDS, 루슨트 테크놀로지스, 도이치은행, 바클리스, 모건스탠리 등에서 근무했고 현재는 맨해튼에 있는 스타트업 회사에서 분산처리, 빅데이터, 머신러닝과 관계된 업무를 수행하고 있다. 지디넷코리아와 한겨레신문에 정기적으로 칼럼을 기고하고 있고, 〈나는 프로그래머다〉 팟캐스트 방송 호스트로 활약 중이다.

1장. 렉스와 야크
   가장 간단한 렉스 프로그램
   렉스 이용한 단어 인식
      기호 테이블
   문법
      파서와 렉서의 의사 소통
      언어 요소 분석기
      야크 파서
      규칙절
   렉스와 야크의 실행
   렉스와 손수 작성한 렉서의 비교
   연습 문제

2장. 렉스 이용하기
   정규 표현식
      정규 표현식의 예
   단어 세기 프로그램
   명령행 파싱
      시작 상태
   C 소스 코드 분석기
   요약
   연습 문제

3장. 야크 이용하기
   문법
      재귀 규칙
   이동/감소 파싱
      야크에서 파싱할 수 없는 문법
   야크 파서
      정의절
      규칙절
      기호 값과 동작
   렉서
      간단한 파서 컴파일 및 실행
   산술 표현식과 모호성
      우선 순위 규칙을 사용하지 말아야 할 때
   변수와 타입을 갖는 토큰
      기호 값과 %union
   기호 테이블
   함수와 예약어
      기호 테이블의 예약어
      교환 가능한 함수와 변수명
   Make를 이용한 파서 구축
   요약
   연습 문제

4장. 메뉴 생성 언어
   MGL 개요
   MGL 개발
   MGL 구축
      초기화
   화면 처리
   종료
   샘플 MGL 코드
   연습문제

5장. SQL 파싱
   SQL 개요
      관계형 데이터베이스
      관계의 구성
      SQL을 사용하는 세 가지 방법
   구문 검사기
      렉서
      에러와 메인 루틴
   파서
      정의
      최상위 규칙
      스키마 서브-언어
      모듈 서브-언어
      조작 서브-언어
      잡동사니
      구문 검사기의 사용
   임베디드 SQL
      렉서에 가한 변경
      파서에 가한 변경
      보조 루틴
      전처리기 이용하기
   연습문제

6장. 렉스 명세서 참조
   렉스 명세서의 구조
      정의절
      규칙절
      사용자 서브루틴
   BEGIN
   버그
      모호한 미리 보기
      AT&T 렉스
      플렉스
   문자 변환
   컨텍스트 감지
      왼쪽 컨텍스트
      오른쪽 컨텍스트
   정의 (대체)
   ECHO
   Include 연산 (파일의 논리적 포함)
      yywrap( )을 이용한 파일 체인
      파일 포함 구조
   문자열에서 읽어들이는 입력
      AT&T 렉스
      플렉스
      아브락사스 피시렉스
      MKS 렉스
      POSIX 렉스
   input( )
   내부 테이블(%N 선언)
   렉스 라이브러리
      main( )
      다른 라이브러리 루틴
   행 번호와 yylineno
   리터럴 블록
   한 프로그램에 존재하는 여러 개의 렉서
      결합된 렉서
      여러 개의 렉서
   output( )
   렉서가 생성한 렉서의 이식성
      렉스 명세서 이식
      생성된 C 렉서 이식
   정규 표현식 구문
      메타 문자
      POSIX 확장
   REJECT
   yylex( )에서 값 리턴하기
   시작 상태
   unput( )
   yyinput( ), yyoutput( ), yyunput( )
   yyleng
   yyless( )
   yylex( )
      yylex( ) 안의 사용자 코드
   yymore( )
   yytext
      yytext 확장
   yywrap( )

7장. 야크 문법 참조
   야크 문법의 구조
      기호
      정의절
      규칙절
      사용자 서브루틴절
   동작
      규칙에 내장된 동작
      내장 동작을 위한 기호 타입
      사라져가는 기능
   모호성과 충돌
      충돌의 타입
   야크에 존재하는 버그
      실제 버그
      무한 재귀
      실제 버그가 아닌 것
   끝 표시기
   에러 토큰과 에러 복구
   %ident 선언
   상속된 속성 ($0)
      상속된 속성을 위한 기호 타입
   렉서의 피드백
   리터럴 블록
   리터럴 토큰
   야크 파서의 이식성
      야크 문법 이식
      생성된 C 파서 이식
   우선 순위, 결합 법칙 그리고 연산자 선언
      우선 순위와 결합 법칙
      연산자 선언
      우선 순위와 결합 법칙 이용한 충돌 해소
      우선 순위의 전형적인 이용
   재귀 규칙
      왼쪽과 오른쪽 재귀
   규칙
   특수 문자
   시작 선언
   기호 값
      기호 타입 선언
      계산기 예제
      명시적인 기호 타입
   토큰
      토큰 번호
      토큰 값
   %type 선언
   %union 선언
   여러 가지 다른 문법들
      결합된 파서
      여러 개의 파서
      재귀적인 파싱
      여러 개의 파서를 위한 렉서
   y.output 파일
   야크 라이브러리
      main( )
      yyerror( )
   YYABORT
   YYACCEPT
   YYBACKUP
   yyclearin
   yydebug와 YYDEBUG
      YYDEBUG
      yydebug
   yyerrok
   YYERROR
   yyerror( )
   yyparse( )
   YYRECOVERING( )

8장. 모호성과 충돌
   포인터 모델과 충돌
      충돌의 타입
      파서 상태
      y.output의 내용
      y.output 안의 충돌 재검토
   충돌의 흔한 예
      표현식 문법
      IF-THEN-ELSE
      중첩 리스트 문법
   충돌 해결 방법
      IF-THEN-ELSE (이동/감소)
      루프 안에 있는 루프 (이동/감소)
      표현식의 우선 순위 (이동/감소)
      제한된 미리 보기 (이동/감소 혹은 감소/감소)
      선택 사항의 중복 (감소/감소)
   요약
   연습 문제

9장. 에러 보고와 복구
   에러 보고
      더 나은 렉스 에러 보고
   에러 복구
      야크 에러 복구
      에러 토큰의 위치
      컴파일러 에러 복구
   연습 문제

부록 A. AT&T 렉스
   에러 메시지

부록 B. AT&T 야크
   옵션
   에러 메시지

부록 C. 버클리 야크
   옵션
   에러 메시지
      치명적인 에러
      일반적인 에러
      경고
      추가적인 정보를 위한 메시지

부록 D. GNU 바이손
   차이점

부록 E. 플렉스
   차이점
   옵션
   에러 메시지
   렉서 예제의 플렉스 버전

부록 F. MKS 렉스와 야크
   차이점
   새로운 기능

부록 G. 아브락사스 렉스와 야크
   차이점
   새로운 기능

부록 H. POSIX 렉스와 야크
   옵션
   차이점

부록 I. MGL 컴파일러 코드
   MGL 야크 소스
   MGL 렉스 소스
   지원을 위한 C 코드

부록 J. SQL 파서 코드
   야크 파서
      상호 참조
   렉스 스캐너
   지원 코드

lex와 yacc은 유닉스 시스템 프로그래밍을 할 때나 새로운 언어를 만들어볼 시험 도구로 적당한 툴들입니다. 이를 한 번이라도 사용해 본 프로그래머라면, 그 필요성을 동감하고 계실 겁니다. 오픈 소스 프로젝트로 lex와 yacc을 대신하는 flex와 bison이 있는데, 오픈 소스인 만큼 pdf로 된 공개된 다큐멘트도 웹에서 구할 수 있습니다. 약간의 문법이 다르긴 하지만, 개념적인 면이나 활용하는 면에서는 거의 마찬가지이므로, 이를 사용하는 것도 많은 도움이 될 것으로 생각됩니다. lex & yacc을 먼저 공부하고, flex & bison을 익혀나가는 것이 개인적으로 좋다고 생각합니다. 책 내용은 설명을 잘 해 놓은 편이지만, 예제나 설명 부분이 아쉬움으로 남습니다.

lex와 yacc란 단어를 처음으로 들어본 것이 언제인지 기억은 나지 않지만 유닉스에서 사용하는 신기하고도 어려운 물건(?) 쯤으로 생각했던 기억이 있다. 그런데 마침 렉스와 야크에 관한 책이... 그것도 한글로 나왔기에(^^;) 그 동안 쌓아왔던 궁금함을 한번 풀어보고 싶은 마음에 이 책을 보게되었다. 만약 필자와 비슷한 생각을 가지고 있었던 독자라면 처음 몇 장만 읽어보아도 렉스와 야크가 어떤 신기한 일(?)을 하는지 그 궁금함을 해결할 수 있을 것이다. 이 책 내용을 간단히 살펴보자면,



처음 1장에서 3장까지는 렉스와 야크에서 사용되는 용어들을 설명하면서 렉스와 야크의 간단한 사용법과 서로 어떻게 맞물려 돌아가는지 알아볼 수 있는 간단한 예제들을 가지고 설명하고 있다.



4, 5장을 통해 좀더 큰 예제인 메뉴 생성기와 SQL 파서를 처음부터 끝까지 차근차근 만들어보면서 렉스와 야크를 좀 더 유용하고 잘 사용할 수 있는 방법을 배울 수 있다.



6, 7장은 렉스 명세서의 형식과 야크 문법의 구조에 대해 논의하고, 각각에서 사용할 수 있는 특징과 옵션, 그리고 기능에 대해 살펴볼 수 있는 레퍼런스이다.



8, 9장은 야크 문법에 존재하는 충돌(에러)을 찾아 수정하는 방법을 살펴보고, 파서와 어휘 분석기가 에러를 검출하는 방법에 대해서 알아본다.



처음 몇 장을 읽어나가면서 중간에 나오는 예제에 모르는 부분이 간혹 있었는데, 혹시나 주위가 산만한 필자(-.-;)가 앞에서 못보고 지나친 내용이 있었나 열심히 앞부분을 찾아보았다. 하지만, 앞부분 어디에도 그런 내용이 없었고, 그 예제의 뒤에 나오는 내용에서 그 부분을 설명하고 있었다. 처음 몇 장에서 혹 예제에 모르는 부분이 나오더라도 너무 긴장하지 말고, 그 부분을 눈여겨 봐두고 앞으로 계속 전진하기 바란다. ^^a



필자는 리눅스 상에서 gcc를 직접 소스를 다운받아 컴파일(물론 gcc로)해서 사용해본 경험이 있는데 그 때, "닭이 먼저냐? 달걀이 먼저냐?"하는 식의 다음과 같은 의문이 들었다. "흠... 컴파일러가 컴파일러를 만들다니... 음... 그렇다면, 가장 맨 처음에는 컴파일러를 어떻게 만들었을까?"하는 해결할 수 없을 것(?)만 같은 생각이었다.(대부분 이런 비슷한 생각을 해 보았을 것이다.) 하지만, 이 책을 읽고 나서 완전하진 않지만 그 의문에 대한 해결의 실마리를 잡을 수가 있었다.



컴파일러에 대해서 좀 더 알고 싶다거나, 자신만의 컴파일러를 만들어 보고 싶은 독자들은 꼭 한 번 읽어봐도 괜찮을 책이라는 생각이 든다. 아마도, 컴파일러 공부를 시작하기 위한 좋은 출발점이 되어줄 것이다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
lex와 yacc, 개정판
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
lex와 yacc, 개정판
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
lex와 yacc, 개정판
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실

최근 본 책0