递归下降分析法的优点: (1)方法简单 (2)能灵活地在各过程中添加语义动作 (3)当能用某种程序设计语言写出所有这些过程或函数(包括递 归过程或函数)时,可以由该语言的编译系统来生成整个识别 程序
递归下降分析法的优点: (1)方法简单 (2)能灵活地在各过程中添加语义动作 (3)当能用某种程序设计语言写出所有这些过程或函数(包括递 归过程或函数)时,可以由该语言的编译系统来生成整个识别 程序
4.14预测分析法 递归子程序是由一组递归过程组成的,它的实现极大程度 地取决于递归过程的实现,如递归过程的允许嵌套调用层数, 但某些程序设计语言不允许递归,也有些程序设计语言递归的嵌 套层数受限制,为此引进了一种新的自顶向下的分析方法——预 测分析法。 预测分析法也是一种无回溯的自顶向下的分析技术,当然一般 情况下,其文法也满足LL(1)文法的条件。 所谓LL(K)分析法,这里的第一个L表示从左到右扫描输 入符号串,第二个L表示分析过程中采用的是最左推导。括号 中的1表向前(向右)看K个符号
4.1.4 预测分析法 递归子程序是由一组递归过程组成的,它的实现极大程度 地取决于递归过程的实现,如递归过程的允许嵌套调用层数, 但某些程序设计语言不允许递归,也有些程序设计语言递归的嵌 套层数受限制,为此引进了一种新的自顶向下的分析方法——预 测分析法。 预测分析法也是一种无回溯的自顶向下的分析技术,当然一般 情况下,其文法也满足LL(1)文法的条件。 所谓LL(K)分析法,这里的第一个L表示从左到右扫描输 入符号串,第二个L表示分析过程中采用的是最左推导。括号 中的1表向前(向右)看K个符号
1.LL(1)分析器的逻辑结构和工作过程 个LL(1)分析器是由一个总控程序,一个输入带、 张分析表和一个栈组成的,如图所示: aa21"拼 输入申〔源找 a分 总控程序 折 分折表M x2拔
1.LL(1)分析器的逻辑结构和工作过程 一个LL(1)分析器是由一个总控程序,一个输入带、一 张分析表和一个栈组成的,如图所示:
(1)分析表 在LL(1)分析器中使用了一张分析表。用M[A,a]形式的矩 阵(或二维数组)表示,其中A是文法的非终结符号,a是文 法的终结符号或“#”(“#是为分析方便而引入的一个特殊符 号,把它作为输入符号串的结束符)。分析表矩阵元素 M[A,a]表示当前非终结符A,面临输入符号a时按存放关于符 A的产生式展开,如表中元素为空白时表示出错。 (2)分析栈 用于存放分析过程中的文法符号。分析栈初始化时,在栈 底压入一个“#”,然后再压入文法的开始符号,表示试图将开 始符号推导出输入符号串
(1)分析表 在LL(1)分析器中使用了一张分析表。用M[A,a]形式的矩 阵(或二维数组)表示,其中A 是文法的非终结符号,a是文 法的终结符号或“#”(“#”是为分析方便而引入的一个特殊符 号,把它作为输入符号串的结束符)。分析表矩阵元素 M[A,a]表示当前非终结符A,面临输入符号a时按存放关于符 A的产生式展开,如表中元素为空白时表示出错。 (2)分析栈 用于存放分析过程中的文法符号。分析栈初始化时,在栈 底压入一个“#”,然后再压入文法的开始符号,表示试图将开 始符号推导出输入符号串
(3)总控程序 总控程序的功能是依据分析表、分析栈和输入符号串的状 态进行分析和识别。它在任何时候都是根据当前分析栈的栈顶 文法符号X和当前的输入符号a来决定采取相应的动作,从而达 到语法分析的目的。 总控程序的具体算法如下: 分析开始时进行有关的初始化工作:把“#”及文法的开始符号 S依次压入分析栈,并把各指示器的指针调整至起始位置 设分析到的某一步,分析栈当前的栈顶符号为X,输入串分析 指针当前指向的符号为a,则: a.若X∈Vt∪{ ①Ⅹ=a=“#”,表示分析成功,停止分析过程。 ②Ⅹ=a≠#,则从栈顶弹出Ⅹ,输入串指向下一个字符
(3)总控程序 总控程序的功能是依据分析表、分析栈和输入符号串的状 态进行分析和识别。它在任何时候都是根据当前分析栈的栈顶 文法符号X和当前的输入符号a来决定采取相应的动作,从而达 到语法分析的目的。 总控程序的具体算法如下: 分析开始时进行有关的初始化工作:把“#”及文法的开始符号 S依次压入分析栈,并把各指示器的指针调整至起始位置。 设分析到的某一步,分析栈当前的栈顶符号为X,输入串分析 指针当前指向的符号为a,则: a.若X∈Vt ∪{#} ①X=a=“#”,表示分析成功,停止分析过程。 ②X=a≠“#”,则从栈顶弹出X,输入串指向下一个字符