05-01: Introduction to Parsing 语法分析
parser的作用:
05-02: Context Free Grammars 上下文无关文法
CFG(上下文无关文法)回答了一个字符串是否属于某语言:
CFG的组成:
- 终止符
- 非终止符
- 开始符
- 生成式
生成式production (非终止符non-terminal -> 终止符terminal)
05-03: Derivations 推导
- 推导是一系列生成
- 推导可以用树的形式表示
- 一个推导可以定义一棵语法树,但是一棵语法树可以定义不同的推导
- 最左推导和最右推导定义同一棵语法树
05-04: Ambiguity
Ambiguity:一个字符串对应多个语法树
避免二义性:
方法1:左递归写法
方法2:用Bison中的%定义
06-01: Error Handling
方法1:panic mode
skip input and try to continue
方法2:error production
specify known common mistakes in the grammar
方法3:error correction
try token insertions and deletion
06-02: Abstract Syntax Trees
- AST:
06-03: Recursive Descent Parsing 递归下降语法分析
Recursive Descent 是一种通用的语法分析算法。
输入:token串
Recursive Descent :判断是否符合该(上下文无关)语言语法,并构建语法树
06-04: Recursive Descent Algorithm
递归下降具体算法:
从开始符号起,依次递归尝试每一个产生式。若返回匹配,且遍历到字符串末尾,则成功。
06-04-1: Recursive Descent Limitations
使用Recursive Descent做语法分析时,需转化左递归文法。
左递归文法是形如 S->Sa 的文法
左递归文法会导致无限循环。因为它本质上是从右到左推导的。而递归下降算法是从左到右推导的。
06-05: Left Recursion
将左递归文法转换为右递归文法的方法:
隐式左递归文法