前言 1
第一章 lex和yacc 9
最简单的lex程序 10
用lex识别单词 11
语法 23
运行lex和yacc 31
lex和手写的词法分析程序 32
练习 35
第二章 使用lex 36
正则表达式 37
单词计数程序 42
分析命令行 48
C源代码分析程序 55
小结 58
练习 59
第三章 使用yacc 60
语法 60
移进归约分析 62
yacc语法分析程序 65
词法分析程序 68
算术表达式和歧义性 69
变量和有类型的标记 74
符号表 77
函数和保留字 81
用make构建语法分析程序 88
小结 89
练习 89
第四章 菜单生成语言 91
MGL的概述 91
开发MGL 93
构建MGL 103
屏幕处理 109
结束 112
MGL代码示例 115
练习 120
第五章 分析SQL 122
SQL的要点概述 123
语法检查程序 127
语法分析程序 133
嵌入式SQL 158
练习 163
第六章 lex规范参考 164
lex规范的结构 164
BEGIN 166
程序错误 166
字符变换 168
上下文相关 169
定义(替换) 171
ECHO 172
包含操作(文件的逻辑嵌套) 172
从字符串中输入 174
input() 176
内部表(%N声明) 177
lex库 178
行号和yylineno 179
文字块 179
一个程序中的多个词法分析程序 179
output() 184
lex词法分析程序的可移植性 185
正则表达式语法 187
REJECT 190
从yylex()中返回值 190
起始状态 191
unput() 193
yyinput()、yyoutput()、yyunput() 194
yyleng 194
yyless() 194
yylex() 195
yymore() 196
yytext 197
yywrap() 199
第七章 yacc语法参考 200
yacc语法的结构 200
动作 201
歧义和冲突 204
yacc中的程序错误 205
结束标记 208
错误标记和错误恢复 208
%ident声明 209
继承的属性($0) 209
词汇的反馈 211
文字块 212
文字标记 213
yacc语法分析程序的可移植性 213
优先级、结合性和操作符声明 215
递归规则 217
规则 219
特殊字符 220
开始声明 221
符号值 222
标记 223
%type声明 226
%union声明 226
变体和多重语法 227
y.output文件 232
yacc库 233
YYABORT 234
YYACCEPT 235
YYBACKUP 235
yyclearin 235
yydebug和YYDEBUG 236
yyerrok 237
YYERROR 237
yyerror() 237
yyparse() 238
YYRECOVERING() 239
第八章 yacc歧义和冲突 240
指针模型和冲突 240
冲突的普通示例 253
如何修复冲突 258
小结 266
练习 266
第九章 错误报告和恢复 267
错误报告 267
错误恢复 272
练习 276
附录一 AT&T lex 279
附录二 AT&T yacc 287
附录三 Berkeley yacc 297
附录四 GNU bison 303
附录五 flex 306
附录六 MKS lex和yacc 318
附录七 Abraxas lex和yacc 320
附录八 POSIX lex和yacc 322
附录九 MGL编译程序代码 325
附录十 SQL分析程序代码 341
参考文献 369
词汇表 371