1、理论基础
- 上下文无关文法
- 下推自动机(PDA)
2、语法分析方式
- 自上而下分析(上-PDA栈顶,下-PDA栈底)
- 自下而上分析
- 优先分析
- LR分析
3、PDA
PDA定义:
-
用法:
-
当输入串读完了,且下推栈为空; or 输入串读完了,且控制器到达某些终态
-
原理解析(推导-匹配-回溯):
- 下推栈里面放着S(非终结符如:S->Sb|c) ,输入带是具体的语句如a+b# ,将语句与下推栈中S的推导后的语句相比,如果相同,消掉,读头向后移一位,继续比较
- 当下推栈为空,且输入带为空(读头到末尾)则匹配,结束。
- 如果下推栈中栈顶元素已经回溯完所有可能状态,仍不能和输入带的读头位置相匹配,-》不匹配,报错,结束。
-
4、带回溯的自上而下分析缺点
- 若文法存在左递归,会出现死循环
- 若产生式存在多个候选式,选择哪一个进行推导完全是盲目的。
- 回溯,时间&空间消耗大
- 若识别语句是错的,但是无法指出具体的错误。
5、不带有回溯的自上而下分析算法
- 消除左递归(如:P->Pa):将左递归转换成右递归
- 消除回溯:
- 预测:根据读头下的符号,准确选择候选式。(求候选式的终结首符集)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>我是分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
1、预测分析程序
核心步骤:
- 求First集合Follow集
- 构造预测分析表
2、LL(1)文法
- 若文法G的预测分析表M中不含有多重定义项,则称G为LL(1)文法
- LL的含义从左到右扫描输入串,采用最左推导分析句子
- LL(1)中的1 表示分析句子时需向前看一个输入符号(避免回溯)
- LL(1)文法是上下文无关文法的一个子集
3、递归下降分析方法
缺点:
- 对文法要求高,必须是LL(1)文法
- 高深度的递归调用会影响语法分析效率,慢&占空间