自底向上分析 ,就是自左至右扫描输入串,自底向上进 行分析;通过反复查找当前句型的 句柄, 并使 用产生式规则 将找到的句柄归约为相应的非终结符 。逐步进行“ 归约 ”,直到至文法的开始符号;
对于规范推导(最右推导)来说,句柄的后边不会出现非终结符;
算符优先分析方法
条件①首先是算符文法:每个产生式都不含有两个相邻的非终结符;
②算符优先文法要求不产生空产生式;
其他条件:
例:判断算符优先文法
1) FIRSTVT集合仅用于算符优先文法;
2) 一般情况下,算法优先文法中的 FIRSTVT(P) 集合要大于LL(1)文法中的 FIRST(P) 集合;
3) 如果有 P→ …a 或 P→ …aQ, LASTVT(P) 包含以 a 结尾或以 aQ 结尾的终结符a ;
4) FOLLOW(P):紧跟在非终结符 P 之后所有可能出现的第一个终结符构成的集合。
例:算符优先分析表构造
特点:
① 不是规范规约,按照最短素短语进行规约;
② 仅考虑终结符,跳过了许多单非产生式对应的规约规则,可能会错误规约;
③若终结符数量多,则构造分析表所占用的空间大;
例:算符优先文法
设有文法G[S]: S → a | b | (A) A → SdA | S
(1) 构造算符优先关系表
(2) 给出句型 (SdSdS) 的短语、简单短语(直接短语)、句柄、素短语和最左素短语
(3) 给出输入串 (adb)# 的分析过程