나에게 필요한 지식과 기술을 검색해 보세요.

lex와 yacc, 개정판

지은이

존 레빈, 토니 매이슨, 더그 브라운

옮긴이

임백준

출간일

2002.11.15

레벨

중고급

평점

4(1명)

정가

23,000

판매가

20,700

총 결제 금액

10%

20,700

적립 예정

1,030P

입력 처리와 구문 해석의 만능 재주꾼
     컴파일러 제작 도구의 혁명 렉스와 야크 철저 분석

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

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

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

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

저자

목차

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 파서 코드
   야크 파서
      상호 참조
   렉스 스캐너
   지원 코드

리뷰

오탈자

23,000

10%

20,700