自上而下分析法
语法树的从左到右叶结点=#,则 #∈L(G)。
1. 文法的逐级优化
消除左递归
- 含有A→Aa形式产生式的文法:直接左递归
- 两步或两步以上:间接左递归
消除方式:
- 写正规式→转化为右递归
- 间接:先代入
- 提取左公因子
通过改写产生式来推迟决定
预测分析法的工作过程:
从文法开始符号出发,在每一步推导过程中根据当前句型的最左非终结符A和当前输入符号a,选择正确的A-产生式。为保证分析的确定性,选出的候选式必须是唯一的。
S_文法(简单的确定性文法)
- 每个产生式的右部都以终结符开始
- 同一非终结符的各个候选式的首终结符都不同
- 注意:S_文法不含\( \varepsilon \)产生式
为了加入\( \varepsilon \)产生式,需要看非终结符后面能跟什么终结符:FOLLOW集
新定义:
非终结符A的后继符号集
- 可能在某个句型中紧跟在A后边的终结符a的集合,记为FOLLOW(A)
产生式的可选集
产生式A→B的可选集是指可以选用该产生式进行推导时,对应的输入符号的集合,记为SELECT(A→B)
SELECT(A→aB) = {a}
SELECT(A→\( \varepsilon \)) = FOLLOW(A)
q_文法
- 每个产生式的右部或为\( \varepsilon \),或以终结符开始
- 具有相同左部的产生式有不相交的可选集
q_文法不含右部以非终结符打头的产生式
新定义:
串首终结符集
- 给定一个文法符号串a,a的串首终结符集FIRST(a)被定义为,可以从a推导出的所有串首终结符构成的集合,包括\( \varepsilon \)
新 · 产生式的可选集
产生式A→B的可选集是指可以选用该产生式进行推导时,对应的输入符号的集合,记为SELECT(A→B)
如果\( \varepsilon \notin FIRST(a) \),那么SELECT(A→a) = FIRST(a)
如果\( \varepsilon \in FIRST(a) \),那么\( SELECT(A→a) = (FIRST(a)-\varepsilon) \cup FOLLOW(A) \)
- LL(1)文法
名称含义
- 第一个“L”表示从左向右扫描输入
- 第二个“L”表示产生最左推导
- “1”表示在每一步中只需要向前看一个输入符号来决定语法分析动作
2. FIRST集和FOLLOW集的计算
每一个都是循环使用,直到不再增大
- FIRST集
a. 找右侧第一个为终结符或空串
b. 找右侧,从左至右,非终结符的FIRST集 - FOLLOW集
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。