Flex&Bison简介
什么是Flex、Bison ?
Flex和Bison是用来生成程序的工具,它们所生成的程序能够处理结构化输入。最初Flex和Bison是用来生成编译器的,但后来它们被证明在其他领域也非常有效。
词法分析和语法分析
语法分析工作可以分为两个部分:词法分析(lexical analysis或称scanning)和语法分析(syntax analysis,或称parsing)。
简单来说,词法分析把输入分割成一个个有意义的词块。称为记号(token),而语法分析则确定这些记号是如何彼此关联的。例如,下面这个C代码片段
alpha = beta + gamma;
词法分析器把这段代码分解为这样一些记号:alpha、等号、beta、加号、gamma和分号。接着语法分析器确定了beta+gemma是一个表达式,而这个表达式被赋给了alpha。
正则表达式和词法分析
词法分析通常所做的就是在输入中寻找字符的模式(pattern) 。例如,在C程序中,整型常量是一个或多个数字的字符串,变量名称是一个字母后面跟着零个或者多个字母和数字,而各种各样的操作符则是一个或者成对的字符。一种简洁明了的模式描述方式就是正则表达式(regular expression,常简写为regex或regexp) 。编辑器ed和vi以及搜索程序egrep就使用这种方式来描述其所需要査找的文本。flex程序主要由一系列带有指令的正则表达式组成,这些指令确定了正则表达式匹配后相应的动作(action) 。由flex生成的词法分析器可以读取输入,匹配输入与所有的正则表达式并且执行每次匹配后适当的关联动作。flex会把所有的正则表达式翻译成一种高效的内部格式,这使它几乎可以同时处理所有需要匹配的模式,因此它的速度可以成百倍地提高。