- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 本章教学线索 1 语法分析器的作用 2 自上而下分析的基本方法和面临的问题 3 LL 1 分析法 4 递归下降分析程序构造 5 预测分析程序 6 LL 1 文法中的出错处理 * 4 递归下降分析程序构造 递归下降分析器:对于LL 1 文法构造不带回朔的自上而下的分析程序,分析程序由一组递归过程组成,每个过程对应文法的一个非终结符。 构造方法:对于每一个A∈VN,构造一个递归程序A,过程A根据当前面临的输入符号(向前看符号)a处于A的那个候选式的FIRST集合中,就选择哪个候选式进行分析,根据选择的候选式,从左到右,若是终结符则和当前输入符号匹配;若是非终结符,则调用相应过程。若a∈FOLLOW A ,则选择A→ε,ε属于A的候选首符集。 * 例如:E→TE‘ E’→+TE‘|ε T→FT’ T‘→*FT’| ε F→ E |i PROCEDURE E; BEGIN T;E’ END; PROCEDURE E’ IF SYM ‘+’ THEN BEGIN ADVANCE; T;E’ END PROCEDURE T; BEGIN F;T’ END PROCEDURE T’ IF SYM ‘*’ THEN BEGIN ADVANCE; F;T’ END; PROCEDURE F; IF SYM ‘i’ THEN ADVANCE ELSE IF SYM ‘(’ THEN BEGIN ADVANCE; E; IF SYM ‘)’ THEN ADVANCE ELSE ERROR END; ELSE ERROR; * 扩充的巴科斯范式(上下文无关文法产生式的元符号“→”“|”的扩展) (1)用 α 表示闭包运算α*; (2)用 表示α可以任意重复0次至n次, α0 ε; (3)用[α]表示 ,即表示α的出现可有可无(等价于α|ε)。 例:实数的定义: decimal→[sign]integer. digit [exponent] exponent→E[sign]integer integer→digit digit sign→+|- digit→0|1|2|3|4|5|6|7|8|9 又如:E→T|E+T 可以表示为 E→T +T * 本章教学线索 1 语法分析器的作用 2 自上而下分析的基本方法和面临的问题 3 LL 1 分析法 4 递归下降分析程序构造 5 预测分析程序 5.1预测分析表的概念和构成 5.2 预测程序的工作过程 6 LL 1 文法中的出错处理 * 5 预测分析程序 预测分析程序就是利用一张分析表和一个栈进行联合控制来实现LL 1 文法的分析,预测分析是一种非递归方法。 预测分析:自顶向下分析是从文法的开始符号出发,试构造一个最左推导,从左到右匹配输入的单词符号串。如果在每步推导中,面对被替代的非终结符A和当前从左到右读入输入串读到的单词符号a,如果A的产生式候选式αi的终结首符集包括a则我们就可以用产生式A→αi构造最左推导,即用αi代替A。 * 5.1 预测分析表的概念和构成 预测分析表的概念: 预测分析表是一个M[A,a]形式的矩阵,其中A为非终结符,a是终结符或‘#’(#作为输入串的结束符)。矩阵元素M[A,a]中存放着一条关于A的产生式,指出当A面临输入符号a时所应采用的候选式。M[A,a]中也可能存放一个“出错标志”,指出A根本不该面临输入符号a。 * 思想:假定A→α是一个产生式,a∈FIRST α ,则当A呈现在STACK栈之顶且a是当前输入符号时,α应被当作A的唯一合适的全权代表。因此M[A,a]中应该放进产生式A→α。当α ε或α ε时,如果当前面临的输入符号a(可能是终结符或‘#’)属于FOLLOW A ,那么,A→α就认为已获得自动匹配,因而,应把A→α放在M[A,a]中。 构造分析表的算法: 对文法G的每个产生式A→α执行第二步和第三步; 对每个终结符a∈FIRST α ,把A→α加到M[A,a]中; 若ε∈FIRST α ,则对任何b∈FOLLOW A 把A→α加到M[A,b]中; 把所有无定义的M[A,a]标上‘出错标志’。 结论: 预测分析表不含多重定义表项,则该文法为LL 1 文法 二义性文法一定不是LL 1 文法 + ? * 5.2 预测程序的工作过程 对于LL 1 文法的分析使用一个预测分析表和一个栈来进行联合控制。栈用来存放文法符号,预测分析表指出当栈顶文法符号面临输入符号时应该采取的动作。 总控程序 ……… a ………# x . . . # 预测分析表M 输入串 预测分析模型 栈 * 预测分析程序的工作过程: 开始工作时,栈中首先放入‘#’号和文法的开始符号。预测分析程序的总控程序在任
文档评论(0)