当前位置: 网站首页>小程序开发>400电话办理

沧县网站推广【沧县办理400电话】沧县SEO优化、沧县微信公众号APP客户端小程序开发、沧县网站托管、沧县APP开发

发表日期: 2021-04-20 14:24:47 浏览次数:111

沧县网站推广【沧县办理400电话】沧县SEO优化、沧县微信公众号APP客户端小程序开发、沧县网站托管、沧县APP开发

沧县,隶属于河北省沧州市,位于位于河北省东南部、冀中平原东部。全县总面积15.33万公顷。 [1]  沧县属暖温带半湿润大陆性季风气候, [2]  县辖4个镇、15个乡, [3]  县政府驻沧州市新华区。 [4]  截至2018年末,沧县总人口740889人。 [2] 

北魏熙平二年(517年),分冀瀛二州之地置沧州。民国二年(1913年)沧州改名沧县,属直隶省渤海道。1983年11月,沧县属沧州市辖。 [2]  沧县境内京沪铁路、京福公路纵贯南北,朔黄铁路由沧县腹地东西穿过。 [5]  2011年11月,沧县被文化部命名为“中国民间文化艺术之乡”。 [6]  县境内有铁狮子、杜林登瀛桥、纪晓岚墓等旅游景点。 [7-8] 

2018年,沧县地区生产总值完成207.4亿元,增长8%。其中:第一产业22.4亿元,增长11.3%;第二产业78.9亿元,增长6%;第三产业106.1亿元,增长9.2%。 [9]  2020年9月,入选河北省食品产业强县(市、区)(培育型)名单。

图11-27(b) 为平衡括号串构建分析树的函数

现在可以一行行考虑图11-27b所示的程序了。第(1)行是两个局部变量firstBsecondB的声明,这两个局部变量的作用是存放在尝试产生式(2)的情况下对B 的两次调用所返回的分析树。第(2)行会测试输入的下一个终结符是否为(。如果是,我们就将在产生式(2)的右部中查找实例,如果不是,就要假设使用的是产生式(1),而且ε 就是该平衡串。

在第(3)行,我们要递增nextTerminal,因为当前输入(已经匹配上了产生式(2)右部中的(。我们现在已经让输入游标处在恰当的位置,它对应的对B 的调用将为产生式(2)右部中的第一个<B>找到平衡串。对B的这次调用是在第(4)行发生的,而该调用返回的树被存储在变量firstB中,它随后会被装配成与当前对B 的调用对应的分析树。

第(5)行要检查是否仍然有能力找到平衡串。也就是说,首先要确定第(4)行对B 的调用没有失败。然后测试nextTerminal当前的值是否为)。回想一下,当B返回时,nextTerminal指向要用来形成平衡串的下一个输入终结符。如果要匹配产生式(2)的右部,而且已经匹配了(与第一个<B>,那么就必须匹配),这就解释了该测试的第二部分。只要该测试的任何一部分失败,当前对B 的调用就会在第(11)行失败。

若通过了第(5)行的测试,则在第(6)和第(7)行要把输入游标移过刚发现的右括号,并再次调用B,以匹配产生式(2)中的最后一个<B>。返回的树被临时存储在secondB中。

如果第(7)行对B 的调用失败,secondB的值就会是FAILED。第(8)行会检测这种情况,而且当前对B 的调用也会失败。

第(10)行代表的是成功找到平衡括号串的情况。我们要返回由makeNode4构建的树。该树具有标号为‘B’的根节点以及4个孩子。第一个是标号为(的叶子节点,它是由makeNode0构造的。第二个是存储在firstB中的树,它是通过第(4)行对B 的调用产生的分析树。第三个是标号为)的叶子节点,第四个则是由第(7)行对B 的第二次调用返回的分析树,它存储在secondB中。

只有在第(5)行的测试失败时,才会使用第(11)行。第(12)行处理的是第(1)行的初始测试没能在第一个字符的位置找到(的情况。在这种情况下,假设产生式(1)是正确的。该产生式的右部为ε,因此我们没有销毁任何输入,但返回了一个由makeNode1创建的节点,其标号为B 而且有一个标号为ε 的子节点。

示例 11.9

假设在输入中有终结符串()()ENDM。这里的ENDM代表字符'\0',它是在C语言中用来标记字符串结尾的。图11-27a中main函数对B的调用确定了(是当前的输入,而且第(2)行的测试会成功。因此,nextTerminal在第(3)行会前移,而且第(4)行会进行对B的第二次调用,表示为图11-28中的“调用2”。

图 11-28 在处理输入()()ENDM时进行的调用

在调用2中,第(2)行的测试失败,因此在第(12)行会返回图11-29a所示的树。现在回到调用1,其中在第(5)行时,nextTerminal指向的是),而且图11-29a的树在firstB中。因此,第(5)行的测试会成功。我们在第(6)行前移nextTerminal,并在第(7)行调用B。这是图11-28中所示的“调用3”。

在调用3中,我们在第(2)行成功,在第(3)行前移nextTerminal,并在第(4)行调用B,该调用就是图11-28中的“调用4”。就和调用2一样,调用4也会在第(2)行的测试失败,并在第(12)行返回一棵类似图11-29a的树但有所不同。

我们现在回到了调用3,其中nextTerminal仍然指向)firstB(是此次对B的调用的局部变量)存放着一棵类似图11-29a这样的树,而且有着第(5)行的控制。这次测试会成功,而且我们会在第(6)行前移nextTerminal,所以它现在指向的是ENDM。我们在第(7)行进行对B的第五次调用。该调用在第(2)行的测试会失败,并在第(12)行返回图11-29a的另一个副本。这棵树称为对应调用3的secondB的值,并且第(8)行的测试也失败了。因此,在调用3的第(10)行,我们要构建如图11-29b所示的树。

至此,调用3在第(8)行成功地返回到调用1,这时调用1的secondB存放着图11-29b中的树。就像在调用3中那样,第(8)行的测试会失败,而且我们在第(10)行要构建一棵有着新根节点的树,其第二个孩子是图11-29a所示树的一个副本(这棵树被存放在调用1的firstB中),而且它的第四个孩子是图11-29b中的树。得到的树被main函数放置在parseTree中,它的样子如图11-29c所示。

图 11-29 由对B 的递归调用构建的树

11.6.3 递归下降分析器的构建

虽然不能针对所有文法,但可以将图11-27中用到的技术扩展到适用于很多文法。关键要求是,对各语法分类<S>,如果存在不止一个以<S>为左部的产生式,那么通过查看当前唯一的终结符(通常被称为前瞻符号),就可以确定那个需要得到尝试的以<S>为左部的产生式。例如,在图11-27中,我们的决策就是,只要前瞻符号是(,就选取右部为(<B>)<B>第二个产生式,而要是前瞻符号为)ENDM,就选定右部为ε 的第一个表达式。


沧县网站推广沧县办理400电话沧县SEO优化、沧县微信公众号APP客户端小程序开发、沧县网站托管、沧县APP开发

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