当前位置: 网站首页>小程序开发>小程序制作

武安网站制作【武安网站优化】武安建网站、武安微信公众号运营、武安网页设计、武安微信小程序商城

发表日期: 2021-04-17 13:58:52 浏览次数:91

武安网站制作【武安网站优化】武安建网站、武安微信公众号运营、武安网页设计、武安微信小程序商城

武安市,河北省直辖,邯郸市代管,位于河北省南部、太行山东麓,晋、冀二省交界地带,处在京津冀、中原经济区两大国家战略“交汇叠加区”,距晋冀鲁豫四个省会城市均在200公里左右。武安市是一座以工业为主的新兴城市,矿产资源以铁、煤矿为主,是全国58个重点产煤县(市)和全国四大富铁矿基地之一,总面积1806平方千米,

武安市下辖13个镇,9个乡,总人口84万(2021年 [36]  )是著名的地方戏曲之乡、古代冶炼之乡、中国小米之乡、全国百强市。2006年,联合国教科文组织授予武安“千年古县”称号。 [2] 

2019年,武安市地区生产总值638亿元,财政总收入105亿元,县域经济综合实力位居全国百强第83位。

2021年3月,被授予 2020年河北省村庄清洁行动先进县(市、区)。

11.7.3 分析树的构建

上面描述的算法可以分辨给定字符串是否在给定语法分类中,不过它并不会生成分析树。不过,对该算法进行简单的修改,它就能在输入字符串在初始化活动记录栈所用的语法分类中时给出相应的分析树。11.6节中描述过的递归下降分析器是从下向上构建分析树的,也就是说,从叶子节点开始,并在函数调用返回时逐渐将其组合成更大的子树。

而对表驱动分析器来说,自上而下地构建分析树要更方便。也就是说,我们从根节点开始,并且随着我们不断选择用来展开栈顶位置语法分类的产生式,就同时为构建中的分析树的节点创建了子节点,这些子节点对应着所选产生式右部中的符号。构建分析树的规则如下所述。

1. 一开始,活动记录栈中只含有某个语法分类,比方说是<S>。我们将分析树初始化为只含一个标号为<S>的节点。栈中的<S>对应着正在构建的分析树中的一个节点。

2. 一般情况下,如果活动记录栈含有符号X1X2Xn,而且X1在栈顶,那么当前分析树的叶子节点标号从左到右排列可以组合成以X1X2Xn 为后缀的字符串s。分析树的后n个叶子节点对应着栈中的符号,所以每个栈符号Xi 都与标号为Xi 的叶子节点对应。

3. 假设语法分类<S>位于栈顶,而且选择用产生式<S>→Y1Y2Yn 的右部替代<S>。我们会找到分析树中对应这一<S>的叶子节点(它是以语法分类为标号的最左子节点),并给它n 个从左至右标号分别为Y1Y2、…、Yn 的子节点。而在右部为ε 的特例中,我们会创建一个标号为ε 的子节点。

示例 11.13

我们按照图11-34中的步骤进行处理,并在这一过程中构建分析树。首先,在第(1)行,活动记录栈只由<S>组成,而且对应的树是如图11-35a所示的单个节点。在第(2)行要用产生式<S>→{<T>展开<S>,因此就为图11-35a中的叶子节点赋予了两个子节点,从左至右分别以{和<T>为标号。对应第(2)行的树如图11-35b所示。

{%}

图 11-35 构建分析树的前几步

第(3)行不会对分析树带来改变,因为我们匹配的是终结符,不会展开语法分类。不过在第(4)行要将<T>展开为<S><T>,所以要为图11-35b中标号为<T>的叶子节点添加两个以这些符号为标号的子节点,如图11-35c所示。然后在第(5)行<S>被展开为wc<S>,这会让图11-35c中标号为<S>的叶子节点得到3个子节点。大家可以自行继续这一过程。最终的分析树如图11-36所示。

图 11-36 对应图11-34中分析过程的完整分析树

11.7.4 让文法变得可分析

正如我们已经看到的,很多文法需要进行一些修改才能用我们在11.6和11.7这两节中了解的递归下降或表驱动方法进行分析。尽管无法保证任何文法都能修改为可用这两种方法分析,但有一些值得了解的小窍门,它们可以让这种使文法变得可分析的修改工作变得更高效。

第一个窍门是消除左递归。我们已经在示例11.11中指出过,产生式<L>→<L><S>|ε 是不能用这些方法分析的,因为没办法弄清应用第一个产生式的次数。一般来说,只要对应某语法分类<X>的产生式的右部以<X>自身开头,我们就不清楚为了展开<X>要应用该产生式多少次。这种情况就叫作左递归。不过,通常可以重新排列有问题产生式的右部中的符号,使得<X>排在靠后的位置。这一步骤就叫作左递归的消除

示例 11.14

在之前讨论过的示例11.11中,我们看到<L>表示0个或更多<S>。因此可以通过调换<S>和<L>的位置消除左递归,这样一来就有

<L>→<S><L>|ε

再举个例子,考虑一下表示数字的产生式:

<数字>→<数字><数码>|<数码>

给定数码作为前瞻符号,就不知道要展开<数字>需要使用第一个产生式多少次。不过,我们看到数字是一个或多个数码,这样就可以重新排列第一个产生式的右部,得到

<数字>→<数码><数字>|<数码>

这一对产生式就消除了左递归。

不过,示例11.14中的产生式还是不能用我们提过的方法分析。要让它们变得可分析,就需要用到第二个窍门——提取左因子(leftfactoring)。当对应语法分类<X>的两个产生式具有以相同符号C 开头的右部时,只要前瞻符号是来自共有符号C 的,我们就没法弄清该使用哪个产生式。

要为这些产生式提取左因子,就要创建表示这些产生式“尾部”,即表示右部中C 之后的部分的语法分类<T>。然后把这两个对应<X>的产生式替换为<X>→C<T>和两个以<T>为左部的两个产生式。这两个产生式的右部是之前所说的“尾部”,也就是对应<X>的两个产生式中C 之后的内容。

示例 11.15

考虑一下示例11.14中设计的对应<数字>的产生式:

<数字>→<数码><数字>|<数码>

这两个产生式是以相同符号<数码>开始的。因此,当前瞻符号为数码时,我们没法分辨要使用哪个产生式。不过,如果提取左因子,得到

<数字>→<数码><尾部>

<尾部>→<数字>|ε

就可以服从这些决定了。在这里,对应<尾部>的这两个产生式让我们选择对应<数字>的第一个产生式的尾部,也就是<数字>本身,或者第二个对应<数字>的产生式的尾部,即ε

现在,当必须扩展<数字>,并以数码作为前瞻符号时,就会用<数码><尾部>替换<数字>,匹配该数码,然后可以根据数码后面跟着的内容选择如何展开尾部。也就是说,如果后面跟着另一个数码,那么就用<尾部>的第一个选择展开,而如果后面跟着的内容不是数码,则可知已经看到整个数字,并用ε 来替换<尾部>。


武安网站制作武安网站优化武安建网站、武安微信公众号运营、武安网页设计、武安微信小程序商城

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: https://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878