FLEX 与 BISON(影印版)

FLEX 与 BISON(影印版) pdf epub mobi txt 电子书 下载 2026

出版者:东南大学出版社
作者:John Levine
出品人:
页数:271
译者:
出版时间:2010
价格:46.00元
装帧:16开
isbn号码:9787564119324
丛书系列:
图书标签:
  • flex
  • bison
  • 编译原理
  • 计算机
  • 编程
  • 词法分析
  • C
  • unix
  • 编译器
  • 词法分析
  • 语法分析
  • Flex
  • Bison
  • 影印版
  • 计算机科学
  • 编程语言
  • 工具书
  • 技术图书
  • 专业教材
想要找书就要到 小哈图书下载中心
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

如果你需要分析或处理Linux或Unix中的文本数据,这本有用的书籍就向你讲解了如何使用flex和bison迅速解决问题。《flex与bison》被期待已久,是经典O’Reilly系列书籍《lex & yacc》的续篇。在原书出版以来的近20年中,flex和bison已被证明比原来的Unix工具更可靠、更强大。

《flex与bison》一书涵盖了Linux和Unix程序开发中相同的重要核心功能,以及一些重要的新主题。你会找到适用于新手的修订教程和适用于高级用户的参考资料,以及对每个程序的基本用法的解释,并且运用它们创建简单、独立的应用程序。有了《flex与bison》,你会发现这些灵活的工具提供的广泛用途。

作者简介

John Levine, Taughannock Networks的创始人,著有20余本技术书籍,其中包括《lex & yacc》和《qmail》,均为O’Reilly出版。

目录信息

Preface
1. Introducing Flex and Bison
Lexical Analysis and Parsing
Regular Expressions and Scanning
Our First Flex Program
Programs in Plain Flex
Putting Flex and Bison Together
The Scanner as Coroutine
Tokens and Values
Grammars and Parsing
BNF Grammars
Bison’s Rule Input Language
Compiling Flex and Bison Programs Together
Ambiguous Grammars: Not Quite
Adding a Few More Rules
Flex and Bison vs. Handwritten Scanners and Parsers
Exercises
2. Using Flex
Regular Expressions
Regular Expression Examples
How Flex Handles Ambiguous Patterns
Context-Dependent Tokens
File I/O in Flex Scanners
Reading Several Files
The I/O Structure of a Flex Scanner
Input to a Flex Scanner
Flex Scanner Output
Start States and Nested Input Files
Symbol Tables and a Concordance Generator
Managing Symbol Tables
Using a Symbol Table
C Language Cross-Reference
Exercises
3. Using Bison
How a Bison Parser Matches Its Input
Shift/Reduce Parsing
What Bison’s LALR(1) Parser Cannot Parse
A Bison Parser
Abstract Syntax Trees
An Improved Calculator That Creates ASTs
Literal Character Tokens
Building the AST Calculator
Shift/Reduce Conflicts and Operator Precedence
When Not to Use Precedence Rules
An Advanced Calculator
Advanced Calculator Parser
Calculator Statement Syntax
Calculator Expression Syntax
Top-Level Calculator Grammar
Basic Parser Error Recovery
The Advanced Calculator Lexer
Reserved Words
Building and Interpreting ASTs
Evaluating Functions in the Calculator
User-Defined Functions
Using the Advanced Calculator
Exercises
4. Parsing SQL
A Quick Overview of SQL
Relational Databases
Manipulating Relations
Three Ways to Use SQL
SQL to RPN
The Lexer
Scanning SQL Keywords
Scanning Numbers
Scanning Operators and Punctuation
Scanning Functions and Names
Comments and Miscellany
The Parser
The Top-Level Parsing Rules
SQL Expressions
Select Statements
Delete Statement
Insert and Replace Statements
Update Statement
Create Database
Create Table
User Variables
The Parser Routines
The Makefile for the SQL Parser
Exercises
5. A Reference for Flex Specifications
Structure of a Flex Specification
Definition Section
Rules Section
User Subroutines
BEGIN
C++ Scanners
Context Sensitivity
Left Context
Right Context
Definitions (Substitutions)
ECHO
Input Management
Stdio File Chaining
Input Buffers
Input from Strings
File Nesting
input()
YY_INPUT
Flex Library
Interactive and Batch Scanners
Line Numbers and yylineno
Literal Block
Multiple Lexers in One Program
Combined Lexers
Multiple Lexers
Options When Building a Scanner
Portability of Flex Lexers
Porting Generated C Lexers
Reentrant Scanners
Extra Data for Reentrant Scanners
Access to Reentrant Scanner Data
Reentrant Scanners, Nested Files, and Multiple Scanners
Using Reentrant Scanners with Bison
Regular Expression Syntax
Metacharacters
REJECT
Returning Values from yylex()
Start States
unput()
yyinput() yyunput()
yyleng
yyless()
yylex() and YY_DECL
yymore()
yyrestart()
yy_scan_string and yy_scan_buffer
YY_USER_ACTION
yywrap()
6. A Reference for Bison Specifications
Structure of a Bison Grammar
Symbols
Definition Section
Rules Section
User Subroutines Section
Actions
Embedded Actions
Symbol Types for Embedded Actions
Ambiguity and Conflicts
Types of Conflicts
Shift/Reduce Conflicts
Reduce/Reduce Conflicts
%expect
GLR Parsers
Bugs in Bison Programs
Infinite Recursion
Interchanging Precedence
Embedded Actions
C++ Parsers
%code Blocks
End Marker
Error Token and Error Recovery
%destructor
Inherited Attributes ($0)
Symbol Types for Inherited Attributes
%initial-action
Lexical Feedback
Literal Block
Literal Tokens
Locations
%parse-param
Portability of Bison Parsers
Porting Bison Grammars
Porting Generated C Parsers
Libraries
Character Codes
Precedence and Associativity Declarations
Precedence
Associativity
Precedence Declarations
Using Precedence and Associativity to Resolve Conflicts
Typical Uses of Precedence
Recursive Rules
Left and Right Recursion
Rules
Special Characters
%start Declaration
Symbol Values
Declaring Symbol Types
Explicit Symbol Types
Tokens
Token Numbers
Token Values
%type Declaration
%union Declaration
Variant and Multiple Grammars
Combined Parsers
Multiple Parsers
Using %name-prefix or the -p Flag
Lexers for Multiple Parsers
Pure Parsers
y.output Files
Bison Library
main()
yyerror()
YYABORT
YYACCEPT
YYBACKUP
yyclearin
yydebug and YYDEBUG
YYDEBUG
yydebug
yyerrok
YYERROR
yyerror()
yyparse()
YYRECOVERING()
7. Ambiguities and Conflicts
The Pointer Model and Conflicts
Kinds of Conflicts
Parser States
Contents of name.output
Reduce/Reduce Conflicts
Shift/Reduce Conflicts
Review of Conflicts in name.output
Common Examples of Conflicts
Expression Grammars
IF/THEN/ELSE
Nested List Grammar
How Do You Fix the Conflict?
IF/THEN/ELSE (Shift/Reduce)
Loop Within a Loop (Shift/Reduce)
Expression Precedence (Shift/Reduce)
Limited Lookahead (Shift/Reduce or Reduce/Reduce)
Overlap of Alternatives (Reduce/Reduce)
Summary
Exercises
8. Error Reporting and Recovery
Error Reporting
Locations
Adding Locations to the Parser
Adding Locations to the Lexer
More Sophisticated Locations with Filenames
Error Recovery
Bison Error Recovery
Freeing Discarded Symbols
Error Recovery in Interactive Parsers
Where to Put Error Tokens
Compiler Error Recovery
Exercises
9. Advanced Flex and Bison
Pure Scanners and Parsers
Pure Scanners in Flex
Pure Parsers in Bison
Using Pure Scanners and Parsers Together
A Reentrant Calculator
GLR Parsing
GLR Version of the SQL Parser
C++ Parsers
A C++ Calculator
C++ Parser Naming
A C++ Parser
Interfacing a Scanner with a C++ Parser
Should You Write Your Parser in C++ ?
Exercises
Appendix: SQL Parser Grammar and Cross-Reference
Glossary
Index
· · · · · · (收起)

读后感

评分

这本书是《lex与yacc》的后继,作者是同一人。比起lex和yacc来,flex和bison有了很多先进的东西,毕竟lex和yacc实在是太老了。 这本书切掉了《lex与yacc》中没什么意思的菜单生成语言的一章。增加了关于高级主题的一章。并且大量更新了例子程序保持与时俱进。 我认为这本书里...  

评分

This book explains how to use flex and bison to solve your problems quickly. Flex and Bison utilities have proven to be more reliable and more powerful than the original Unix tools. Flex & bison covers the same core functionality vital to Linux and Unix pro...

评分

本书的 flex reference 和 bison reference 以及后续章节可仔细阅读,前面章节的例子有点粗浅,过于简单。比如,关于 SQL 的解析,可以参看一下 postgreSQL 的源码,其 SQL 解析用的就是 flex/bison。  

评分

This book explains how to use flex and bison to solve your problems quickly. Flex and Bison utilities have proven to be more reliable and more powerful than the original Unix tools. Flex & bison covers the same core functionality vital to Linux and Unix pro...

评分

本书的 flex reference 和 bison reference 以及后续章节可仔细阅读,前面章节的例子有点粗浅,过于简单。比如,关于 SQL 的解析,可以参看一下 postgreSQL 的源码,其 SQL 解析用的就是 flex/bison。  

用户评价

评分

这本书的叙事节奏把握得极其到位,让人越读越有味道。它不是那种让你一口气读完就束之高阁的“速朽读物”,而是一本需要反复咀嚼、时常翻阅的“常青树”。第一次阅读时,你可能主要关注的是如何配置 FLEX 和 BISON,如何快速生成一个能工作的解析器框架。但随着你在项目中遇到更复杂、更微妙的语义分析问题时,你会发现自己不自觉地又翻回了书中关于上下文相关的处理章节。影印版带来的那种沉甸甸的踏实感,让我在深夜调试代码时,总愿意把它放在手边。与其他工具书的“食谱式”描述不同,这本书更像是在与一位经验丰富的导师对话,他不仅告诉你“做什么”,更重要的是告诉你“为什么这么做”,以及在不同场景下的利弊权衡。这种深层次的理解积累,才是真正拉开普通开发者和高级工程师差距的关键所在。

评分

翻开这本厚重的《FLEX 与 BISON》,一股知识的洪流扑面而来。初识这两位“大师”,便感觉自己站在一个宏大编译世界的门口。这本书的结构编排极为精妙,从最基础的词法分析概念娓娓道来,层层递进,将复杂的解析过程描绘得如同精美的艺术品。它不像某些教科书那样枯燥乏味,而是充满了实践的温度。我特别欣赏作者在讲解每一步文法规则转换时,总是会配合清晰的图示和贴近实际编程环境的示例。读到关于运算符优先级和结合性的处理部分,那种豁然开朗的感觉,仿佛多年来困扰我的“晦涩难懂”终于找到了钥匙。这本书不仅仅是教会你如何调用工具,更深层次地,它是在培养你对程序语言内在逻辑的深刻洞察力。读完前三分之一,我已经能更自信地去审视那些底层编译器的设计哲学了。这种潜移默化的影响,远比死记硬背语法规则要宝贵得多。对于任何想要深入理解编程语言处理机制的工程师来说,这本书提供了一个坚实且富有洞察力的起点。

评分

老实说,我是一个对底层工具链有莫名的情结的人,手里也翻阅过不少相关的书籍,但很少有像这本《FLEX 与 BISON》这样,能将理论的严谨性与实际操作的灵活性结合得如此天衣无缝。它的文字风格带着一种老派技术手册的沉稳,但每一个章节的深入探讨都精准地击中了要害。我记得在解析歧义文法的那一节,作者没有采用那种高高在上的说教口吻,而是通过一个极具代表性的冲突案例,细致地剖析了 LALR(1) 冲突是如何产生的,以及如何通过手工干预或调整文法规则来巧妙化解。这种“手把手”的指导,对于实际项目中的疑难杂症,简直是雪中送炭。影印版的质感虽然是次要的,但那种阅读纸质书带来的专注感是电子书无法替代的。这本书的价值在于,它教会你如何“思考”生成器的工作方式,而不是仅仅“使用”它们。如果你想让你的编译器或解释器项目不再是“黑箱操作”,这本书绝对是案头必备的工具书。

评分

对于初次接触解析工具的读者来说,这本书的入门门槛或许会显得略高,但一旦跨过那道坎,它所能带来的回报是指数级的。我尝试过其他一些在线教程和轻量级指南,它们可能教会你如何生成一个简单的计算器,但一旦涉及宏定义、预处理器指令或者复杂的嵌套结构时,往往就显得力不从心了。这本书的优势在于,它将 FLEX 和 BISON 的设计哲学——即如何将词法分析和语法分析有效解耦,如何通过宏和用户代码的巧妙植入来扩展标准功能——阐述得极其透彻。它强调的不仅仅是表层的代码生成,更是底层状态机和上下文栈的运作原理。读完这本书,我不再满足于仅仅调用 `yylex()` 和 `yyparse()`,而是开始思考如何根据自己的需求,定制更优化的输入缓冲区管理和更复杂的错误报告系统。它真正打开了我对程序语言处理框架的“好奇心黑匣子”。

评分

我购买这本书主要是冲着其在实际应用案例中的深度解析去的,它完全没有让我失望。与其他偏学术、晦涩难懂的编译原理书籍不同,这本书更像是一本高级工程师的实战笔记。它没有沉溺于复杂的数学推导,而是将重点放在了如何构建高效、健壮的解析器上。我尤其欣赏它在错误恢复机制上的论述,这部分往往是教程中最容易被一带而过的“鸡肋”,但却是真实项目中稳定性杀手。作者用了相当大的篇幅,详尽地展示了如何设计容错的词法分析器,以便在面对不规范的输入时,程序不会轻易崩溃,而是能给出有意义的错误提示并继续处理。这种对“健壮性”的关注,体现了作者深厚的工程经验。对于那些正在开发领域特定语言(DSL)或需要处理复杂文本格式解析任务的开发者而言,这本书提供的不仅仅是工具,更是一种久经考验的架构思路。

评分

学习flex与bison的非常好的入门书,也包含了一些高级主题,支持自定义函数、分支和循环语句的计算器例子对初学者非常有用。对于可重入的解析器、冲突处理、错误处理、GLR等高级主题也有介绍。

评分

刚刚读了第一章,发现两个问题:1. p11 代码中14行应输出exp的值,既$2。2. 实验绝对值功能时发现处理不了“-2”、“+(3*8)"这样的前缀正负号啊,在term中加上`ADD term {$$ = $2}`及`SUB term {$$ = -$2}`即可。

评分

学习flex与bison的非常好的入门书,也包含了一些高级主题,支持自定义函数、分支和循环语句的计算器例子对初学者非常有用。对于可重入的解析器、冲突处理、错误处理、GLR等高级主题也有介绍。

评分

刚刚读了第一章,发现两个问题:1. p11 代码中14行应输出exp的值,既$2。2. 实验绝对值功能时发现处理不了“-2”、“+(3*8)"这样的前缀正负号啊,在term中加上`ADD term {$$ = $2}`及`SUB term {$$ = -$2}`即可。

评分

学习flex与bison的非常好的入门书,也包含了一些高级主题,支持自定义函数、分支和循环语句的计算器例子对初学者非常有用。对于可重入的解析器、冲突处理、错误处理、GLR等高级主题也有介绍。

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 qciss.net All Rights Reserved. 小哈图书下载中心 版权所有