內容介紹
《lex與yacc》(第二版)是惟一一本專門介紹這兩個重要的UNIX編程工具的書。這本新版本是完全的修訂版,並以很多新的擴充示例代替了舊的示例。幾個介紹性章節已經完全重寫,還有一章專門介紹實現SQL語法,給出了有經驗的程式設計師希望看到的各種細節。本書對lex和yacc的重要主題提供了詳盡的參考。對所有主要的lex和yacc的MS-DOS和UNIX版本,本書都進行了介紹,包括AT&T lex和yacc、Berkeley yacc、Berkeley/Gnu flex、Gnu bison、MKS lex和yacc、Abraxas PCYACC等等。
“太棒了!我已經讀完《lex與yacc》的第二版……總而言之,這是一件偉大的作品 —— 這本書比第一版充實很多,詳實而透徹。閱讀的過程中,我經歷了無數次的驚喜,心裡總想‘可惜了,他們已經錯過了也許是細微而精妙的地方,我先做個注釋’,然而隨後在下一個句子或段落就看到對該問題的闡釋。”
“[John Levine]做了大量的工作來完善這本書。我很高興最終有一本好書推薦給人們。”
——Vern Paxson,flex的開發者
作者介紹
John R. LevineJohn R. Levine編著、演講和諮詢過許多有關UNIX和編譯程式的主題。他主持了Usenet上的線上comp.compilers.discussion組,從事Lotus 1-2-3的UNIX版本以及Norton實用程式的設計工作,並且是IMB RT PC的AIX設計者之一。1984年他獲得了耶魯大學計算機科學博士學位。
Tony Mason
Tony Mason目前是Transarc 公司AFS開發組成員,創辦投資的這個小公司專攻分散式系統軟體。以前,他工作於史丹福大學的分散式作業系統和數據通信領域的Distributed Systems Group。1987年他在芝加哥大學獲得數學理學學士學位。
Doug Brown
Doug Brown是俄勒岡州的一位諮詢人員。他自1977年開始從事電路仿真、合成和測試工作。他是O'Reilly & Associates, Inc.出版的《lex & yacc》一書的作者之一。他1976年畢業於Illinois大學Urbana-Champaign分校,獲得了電氣工程碩士學位。
Doug Brown是Beaverton、Oregon的顧問和承包商。自1977年以來他一直在開發電路模擬、合成和測試的軟體。Doug與人合著了《C++:The Core Language》—— 它是O'Reilly & Associates公司出版的另一本技術手冊。1976年他在伊利諾斯州大學厄巴納-尚佩恩分校獲得電氣工程理學碩士學位。
作品目錄
前言第一章 lex和yacc
最簡單的lex程式
用lex識別單詞
語法
運行lex和yacc
lex和手寫的詞法分析程式
練習
第二章 使用lex
正則表達式
單詞計數程式
分析命令行
C原始碼分析程式
小結
練習
第三章 使用yacc
語法
移進/歸約分析
yacc語法分析程式
詞法分析程式
算術表達式和歧義性
變數和有類型的標記
符號表
函式和保留字
用make構建語法分析程式
小結
練習
第四章 選單生成語言
MGL的概述
開發MGL
構建MGL
螢幕處理
結束
MGL代碼示例
練習
第五章 分析SQL
SQL的要點概述
語法檢查程式
語法分析程式
嵌入式SQL
練習
第六章 lex規範參考
lex規範的結構
BEGIN
程式錯誤
字元變換
上下文相關
定義(替換)
ECHO
包含操作(檔案的邏輯嵌套)
從字元串中輸入
input()
內部表(%N聲明)
lex庫
行號和yylineno
文字塊
一個程式中的多個詞法分析程式
output()
lex 詞法分析程式的可移植性
正則表達式語法
REJECT
從yylex()中返回值
起始狀態
unput()
yyinput()、yyoutput()、yyunput()
yyleng
yyless()
yylex()
yymore()
yytext
yywrap()
第七章 yacc語法參考
yacc語法的結構
動作
歧義和衝突
yacc中的程式錯誤
結束標記
錯誤標記和錯誤恢復
%ident 聲明
繼承的屬性($0)
辭彙的反饋
文字塊
文字標記
yacc語法分析程式的可移植性
優先權、結合性和操作符聲明
遞歸規則
規則
特殊字元
開始聲明
符號值
標記
%type聲明
%union聲明
變體和多重語法
y.output檔案
yacc庫
YYABORT
YYACCEPT
YYBACKUP
yyclearin
yydebug和YYDEBUG
yyerrok
YYERROR
yyerror()
yyparse()
YYRECOVERING()
第八章 yacc歧義和衝突
指針模型和衝突
衝突的普通示例
如何修復衝突
小結
練習
第九章 錯誤報告和恢復
錯誤報告
錯誤恢復
練習
附錄一 AT&T lex
附錄二 AT&T yacc
附錄三 Berkeley yacc
附錄四 GNU bison
附錄五 flex
附錄六 MKS lex和yacc
附錄七 Abraxas lex和yacc
附錄八 POSIX lex和yacc
附錄九 MGL編譯程式代碼
附錄十 SQL分析程式代碼
參考文獻
辭彙表