1、理论基础
- 上下文无关文法
- 下推自动机(PDA)
2、语法分析方式
- 自上而下分析(上-PDA栈顶,下-PDA栈底)
- 自下而上分析
- 优先分析
- LR分析
3、PDA
PDA定义:
-
用法:
-
当输入串读完了,且下推栈为空; or 输入串读完了,且控制器到达某些终态
-
原理解析:
- 下推栈里面放着S(非终结符如:S->Sb|c) ,输入带是具体的语句如a+b# ,将语句与下推栈中中S相比,如果相同,消掉,读头向后移一位,继续比较
- 当下推栈为空,且输入带为空(读头到末尾)则匹配,结束。
- 如果下推栈中栈顶元素已经回溯完所有可能状态,仍不能和输入带的读头位置相匹配,-》不匹配,报错,结束。
-
4、带回溯的自上而下分析缺点
- 若文法存在左递归,会出现死循环
- 若产生式存在多个候选式,选择哪一个进行推导完全是盲目的。
- 回溯,时间&空间消耗大
- 若识别语句是错的,但是无法指出具体的错误。
5、不带有回溯的自上而下分析算法
- 消除左递归(如:P->Pa)