正在加载图片...
China-pub.com 下载 第4章自顶向下的分析 本章要点 ·使用递归下降分析算法进行自顶向下的分析 ·TNY语言的递归下降分析程序 LL()分析 ·自顶向下分析程序中的错误校正 ·First集合和Follow集合 自顶向下(toP-down)的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。 之所以称这样的算法为自顶向下是由于分析树隐含的编号是一个前序编号,而且其顺序是由根 到叶(参见第3章的3.3节)。自顶向下的分析程序有两类:回湖分析程序(backtracking parser) 和预测分析程序(predictive parser)。预测分析程序试图利用一个或多个先行记号来预测出输 入串中的下一个构造,而回溯分析程序则试着分析其他可能的输入,当一种可能失败时就要求 输入中备份任意数量的字符。虽然回溯分析程序比预测分析程序强大许多,但它们都非常慢, 般都在指数的数量级上,所以对于实际的编译器并不合适。本书将不研究回湖程序(但读者 可查看“注意与参考”部分以及练习以得到一些关于这个主题的提示)。 本章要学习的两类自顶向下分析算法分别是递归下降分析(recursive-descent parsing) 和LL(1)分析(LL(1)parsing)。递归下降分析很常用,且它对于手写的分析程序最为适合, 所以我们最先学习它。之后再来学习LL(1)分析,由于在实际中并不常用到它,所以只是将 其作为一个带有显式栈的简单实例来学习,它是下一章更强大(但也更复杂)的自底向上算 法的前奏。它对于将出现在递归下降分析中的一些问题形式化也有帮助。LL(1)分析方法是 这样得名的:第1个“L”指的是由左向右地处理命入(一些旧式的分析程序惯于自右向左地 处理输入,但现在已不常用了)。第2个“L”指的是它为输入串描绘出一个最左推导。括号 中的数字1意味着它仅使用输入中的一个符号来预测分析的方向(“LL(k)分析”也是有可能 的 一它利用向前看的k个符号,本章后面将简要地介绍到它,但是向前看的一个符号是最 为常见的)。 弟归下降程序分析和LL(1)分析一般地都要求计算先行集合,它们分别称作F「s伟合和 Follow集合O。由于无需显式地构造出这些集合就可以构造出简单的自顶向下的分析程序,所 以在基本算法的介绍之后我们再讨论它们。之后我们还要谈到一个由递归下降分析构造的 TNY分析程序,本章的最后是自项向下的分析中的错误校正。 4.1使用递归下降分析算法进行自顶向下的分析 4.1.1递归下降分析的基本方法 递归下降分析的概念极为简单:将一个非终结符A的文法规则看作将识别A的一个过程的 定义。A的文法规则的右边指出这个过程的代码结构:一个选择中的终结符与非终结符序列与 日下一章将要研究的自底向上的分析算法有一些也需要这些集合。 下载 第4章 自顶向下的分析 本章要点 • 使用递归下降分析算法进行自顶向下的分析 • TINY语言的递归下降分析程序 • LL(1)分析 • 自顶向下分析程序中的错误校正 • First 集合和F o l l o w集合 自顶向下(t o p - d o w n)的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。 之所以称这样的算法为自顶向下是由于分析树隐含的编号是一个前序编号,而且其顺序是由根 到叶(参见第3章的3 . 3节)。自顶向下的分析程序有两类:回溯分析程序( backtracking parser) 和预测分析程序(predictive parser)。预测分析程序试图利用一个或多个先行记号来预测出输 入串中的下一个构造,而回溯分析程序则试着分析其他可能的输入,当一种可能失败时就要求 输入中备份任意数量的字符。虽然回溯分析程序比预测分析程序强大许多,但它们都非常慢, 一般都在指数的数量级上,所以对于实际的编译器并不合适。本书将不研究回溯程序(但读者 可查看“注意与参考”部分以及练习以得到一些关于这个主题的提示)。 本章要学习的两类自顶向下分析算法分别是递归下降分析( recursive-descent parsing) 和L L ( 1 )分析(LL(1) parsing)。递归下降分析很常用,且它对于手写的分析程序最为适合, 所以我们最先学习它。之后再来学习 L L ( 1 )分析,由于在实际中并不常用到它,所以只是将 其作为一个带有显式栈的简单实例来学习,它是下一章更强大(但也更复杂)的自底向上算 法的前奏。它对于将出现在递归下降分析中的一些问题形式化也有帮助。 L L ( 1 )分析方法是 这样得名的:第 1个“L”指的是由左向右地处理输入(一些旧式的分析程序惯于自右向左地 处理输入,但现在已不常用了)。第2个“L”指的是它为输入串描绘出一个最左推导。括号 中的数字1意味着它仅使用输入中的一个符号来预测分析的方向(“L L ( k )分析”也是有可能 的——它利用向前看的 k个符号,本章后面将简要地介绍到它,但是向前看的一个符号是最 为常见的)。 递归下降程序分析和 L L ( 1 )分析一般地都要求计算先行集合,它们分别称作 F i r s t集合和 F o l l o w集合 。由于无需显式地构造出这些集合就可以构造出简单的自顶向下的分析程序,所 以在基本算法的介绍之后我们再讨论它们。之后我们还要谈到一个由递归下降分析构造的 T I N Y分析程序,本章的最后是自顶向下的分析中的错误校正。 4.1 使用递归下降分析算法进行自顶向下的分析 4.1.1 递归下降分析的基本方法 递归下降分析的概念极为简单:将一个非终结符 A的文法规则看作将识别 A的一个过程的 定义。A的文法规则的右边指出这个过程的代码结构:一个选择中的终结符与非终结符序列与 下一章将要研究的自底向上的分析算法有一些也需要这些集合
向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有