一、背景

在分析阅读pg 11的源代码时,发现pg的语法分析模块使用了Lex&Yacc。
pg使用的的Flex & bison——lex & yacc的升级版。

二、Flex & bison简介

Flex和bison是两个用来生成程序的工具,它们生成的程序分别叫做词法分析器和语法分析器,postgresql主要是用来生成SQL语句的词法和语法分析器。

flex & bison

三、Flex & bison 的工作流程

任何一种语言,都是有一定的语法规则的,不管是人类的语言,还是计算机语言(如C/C++编程语言等),因此,可以利用这些已知的规则,来对相应的语言进行分析。

例如汉语中的一个句子,基本的格式是:主(名词/代词)+谓(动词)+宾(名词/代词),当你在说一句话的时候,我们把你说的话(输入)先拆分成一个个有意义的字或者词组,然后对照该语法,看词性及组合,是否符合既定的语法规范,如果符合,则可以知道你说的话是符合规范的。

比如,你说“我吃饭”,输入会被依次拆成:“我”、“吃”、“饭”
它们分别是代词、动词、名词,因此符合上面的语法规则,因此这句话是OK的。而如果说“我饭吃”,则会发现与上面的规范不符合(也没有其他符合的规范),因此这句话语法上是有问题的。

Flex和bison生成的词法和语法分析器就是干这两件事的:
1. Flex生成的词法分析器将输入拆分成一个个记号(token);
2. bison生成的语法分析器根据已有的规则,分析这些token的组合,是否符合语法规范。

工作流程

四、总结

本文主要介绍了Lex & Yacc 的用途和工作流程。

02-20 09:12