- 1
- 0
- 约5.56千字
- 约 34页
- 2019-04-13 发布于湖北
- 举报
第四章 语法分析-自上而下分析 4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.4 递归下降分析程序构造 4.5 预测分析程序 4.6 LL(1)分析中的错误处理 4.1 语法分析器的功能 功能定义: 按照文法产生式,识别输入符号串是否为一个句子。 技术路线: 是否能从文法的开始符号出发推导出这个输入串。或者,建立一颗与输入串相匹配的语法分析树。 策略: 自上而下分析法,自下而上分析法。 4.2 自上而下分析面临的问题 例4.1 假定有文法 (1) S?xAy (2)A?**|* 对输入串x*y,构造语法树。 构造过程: (1)把S作为根 (2)用S的产生式构造子树 (3)让输入串指示器IP指向输入串的第一个符号。 (4)调整输入串指示器IP与叶结点进行匹配。 (5)如果为非终结符,用A的下一个产生式构建子树。 (6)如果匹配成功则结束;否则,回溯到步骤(4)。 自上而下分析法的缺点: 是文法的左递归性问题。一个文法是含有左递归的自上而下的分析过程陷入无限循环。如P?P?。 由于有回溯,就会产生一大堆麻烦事情。 在上述的自上而下分析过程中,当一个非终结符用某一候选匹配成功时,这种成功可能仅是暂时的。这种虚假现象,我们需要更复杂的回溯技术。一般说,要消除虚假匹配是很困难的。 当最终报告分析不成功时,我们不知道输入串中出错的确切位置。 4.3 LL(1)分析法 4.3.1 左递归的消除 4.3.2 消除回溯、提左因子 4.3.3 LL(1)分析条件 4.3.1左递归的消除 一个简单例子: 已知文法:P?P?|?是一个左递归文法,它的等价的非左递归文法为: P?? P’ P’ ? ?P’|? 例2.2 一般转换规则有: P?P?1| P?2| …| P?m| ?1 | ?2 |…| ?n改写成 P??1P’|?2P’ |…|?nP’ P’??1P’ |?2P’| …|?mP’ | ? 其中: ?i都不以P开头, ?I不等于? 一个反例: 文法:S?Qc|c;Q?Rb|b;R?Sa|a虽然不是直接左递归,但S、Q、R都是左递归。 消除左递归算法: 算法的思想是: 首先构造直接左递归; 再利用一般转换规则,消除直接左递归 化简文法。 下面算法在不含P?P,也不含?在右部产生式时可以消除左递归。 消除一个文法的左递归算法: (1)把文法G的所有非终结符按任一种顺利排列成P1…Pn;按此顺序执行; (2) FOR i:=1 TO n DO BEGIN FOR j:=1 TO i-1 DO 把形如Pj+1→Pj ?的规则改写成 Pj+1??1?|?1?|…?k?|。其中Pj??1|?1|…?k是关于Pj的 所有规则; 消除关于Pi规则的直接左递归性。 END 化简由(2)所得的文法。即去除那些从开始符号出发永远无法到达的非终结符的产生规则。 例子4.3: 对4.3文法,它的非终结符排序为R,Q,S。把R代入Q,Q代入S得到:S?Sabc|abc|bc|c 消除左递归后得到: S?abcS’|bcS’|cS’ S’?abcS’|? Q?Sab|ab|b(化简消去) R?Sa|a(化简后消去) 对不同的排列,会有不同形式的无左递归文法,但它们等价。 4.3.2 消除回溯、提左因子 消除回溯的思路: 对输入符号a,指派一个A的候选式?1与a匹配,而再没有其他候选式?i的字符与a匹配。 通过提取公共左因子,判断首字符集的差异。 首字符集定义: 对G的所有非终结符的每个候选?,它的首字符集为 FIRST(?)={a| ??a…,a?VT},若??*?,则规定? ? FIRST(?)。 提取公共左因子算法: A???1|??2|…|??n|?1|?2|… |?m(其中每个? 不以?开头) 那么可以把这些规则改写成: A??A’|?1|?2|… |?m A’??1|?2|…|?n 例4.4 上述算法的不足: 当非终结符A面临输入符号a,且a不属于A的任意候选首符集,但A的某个候选首符集包?含时,就一定可以使A自动匹配。这是一种错误。 4.3.3 LL(1)分析条件 定义FOLLOW(A) 集合: 假定S是文法G的开始符号,对于G的任何非终结符A,我们定义 FOLLOW(A)={a|S?*…Aa…,a∈VT} 若S?*…A,则规定#∈FOLLOW(A)。 LL(1)文法的充分必要条件: 文法不含左递归。 若A→?1|?2|…|?n,则FIRST(?i)∩FIRST(?j)=Φ (i≠j) 对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则FIRST(A)∩FOLLOW(A)=Φ LL(1)匹配算法: 对输入符号a,A
您可能关注的文档
- 第三节隐函数的导数和由参数方程确定的函数的导数94301.ppt
- 第九章第四节函数展开成幂级数.ppt
- 第九章压杆的稳定53385.ppt
- 第二十二章解热镇痛抗炎药.ppt
- 第三节三重积分78743.ppt
- 第三课认识自己.ppt
- 第九章多元函数微分法.ppt
- 第九章93圆的方程.ppt
- 第九章常微分方程的数值解法53180.ppt
- 第二章企业的理财环境公司理财.ppt
- 七年级语文上册期末模拟试卷1(解析版).docx
- 七年级语文上册期末模拟试卷1(原卷版).docx
- 七年级语文上册期末模拟试卷2(原卷版).docx
- 七年级语文上册期末模拟试卷2(解析版).docx
- 期末测试卷(二)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(三)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(二)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(三)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(一)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(一)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
原创力文档

文档评论(0)