当前位置:网站首页>网站建设>网站推广

三河申请400电话费用【三河企业全国热线电话办理】三河开通400电话电信价格、三河微信公众号代运营外包托管、三河网店编辑装修美工、三河网站推广优化大概需要多少钱

发表日期: 2021-04-17 13:40:08 浏览次数:4

三河申请400电话费用【三河企业全国热线电话办理】三河开通400电话电信价格、三河微信公众号代运营外包托管、三河网店编辑装修美工、三河网站推广优化大概需要多少钱


三河古镇,古名鹊渚、鹊尾(渚)、鹊岸,是中国历史文化名镇,国家AAAAA级旅游景区,位于安徽省合肥市肥西县南端,地处肥西、庐江、舒城交界处,古镇总面积2.9平方公里。 [1-2] 

三河古镇原是巢湖中的高洲,因泥沙淤积,渐成陆地。南北朝后期称三汊河,明、清置三河镇。 [2] 

三河古镇有丰乐河、杭埠河、小南河在境内汇合,经新河向东流约15公里入巢湖。镇内有古城墙、古炮台、太平军指挥部旧址、英王府、一人巷、万年台、李府粮仓、鹤庐、刘同兴隆庄等历史遗迹,是庐剧的发源地,古镇有米饺、牛皮糖、酥糖、麦芽糖、茶干、米酒等特产。 [3] 

为表达对全体医护人员的敬意和感谢,自疫情结束恢复运营之日起至2020年12月31日,三河古镇景区所有收费景区将面向全国医护工作者实行免费游览政策。

11.6.3 递归下降分析器的构建

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

一般来说,我们不可能弄清对某定义文法而言是否存在总能做出正确决定的算法。对图11-27来说,我们声明所陈述的策略是行得通的,但并未对此加以证明。不过,如果拥有自己相信行得通的决策,那么就可以按照如下方式为各语法分类<S>设计函数S

1. 检查前瞻符号,并决定要尝试哪个产生式。假设被选中的产生式右部为X1X2Xn

2. 对i=1、2、…、n,为Xi 进行以下操作。

(a) 如果Xi 是终结符,检查前瞻符号是否为Xi 。如果是,则前移输入游标。如果不是,那么这次对S 的调用就失败了。

(b) 如果Xi 是语法分类,比方说是<T>,就调用对应该语法分类的函数T。如果T 以失败状态返回,就说明对S 的调用失败了。如果T 成功返回,就把返回的树存储起来以待随后使用。

如果在考虑完所有的Xi 之后都没有失败,就创建各孩子按次序分别对应X1X2、…Xn 的新节点,以组成一棵要返回的分析树。如果Xi 是终结符,那么Xi 的孩子就是新创建的以Xi 为标号的叶子节点。如果Xi 是语法分类,那么Xi 的子节点就是在与Xi 对应的函数完成调用时返回的树的根节点。图11-29就是这种树构建过程的示例。

如果语法分类<S>表示所含字符串有待识别和分析的语言,就要在第一个输入的终结符处放置输入游标,开始分析过程。如果输入在语言L(<S>)中,对函数S 的调用就会使得对应该输入的分析树被构建起来,而如果不在的话,对S 的调用就会返回失败。

11.6.4 习题

1. 给出针对以下输入,图11-27所示的程序所执行的调用序列,其中每种情况下最后都跟着端记号ENDM符号。

(a) (())

(b) (()())

(c) ())(

2. 考虑以下表示数字的文法。

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

<数码>→0 | 1 | … | 9

设计对应该文法的递归下降分析器,也就是说,编写两个函数,其中一个对应<数字>,另一个对应<数码>。大家可以遵照图11-27中的格式,并假设存在makeNode1这种根节点具有指定数目子节点的树。

3. ** 假设把习题2中对应<数字>的生成式写为

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

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

是否还能够设计递归下降分析器?为什么?

(1) <L> → ( <E> <T>
(2) <T> → , <E> <T>
(3) <T> → )
(4) <E> → <L>
(5) <E> → 原子

图 11-30 对应表结构的文法

4. * 图11-30所示的文法定义了非空表,表的元素是由逗号分隔并由括号包围的。元素可以是原子或表结构体。在这里,<E>代表元素,<L>表示表,而<T>则对应“尾部”,也就是,要么是闭合的),要么是由逗号和以)结尾的元素构成的配对。为图11-30中的文法编写递归下降分析器。

11.7 表驱动分析算法

正如我们在6.7节中看到过的,递归函数调用通常是用活动记录栈实现的。因为递归下降分析器中的函数完成的工作非常具体,所以可以用一个检查表并操作栈的函数来代替这些函数。

要记得,对应语法分类<S>的函数S 首先要决定使用哪个产生式,然后经过一系列步骤,每个步骤都对应着所选产生式右部中的一个符号。因此,可以维持一个大致与活动记录栈对应的文法符号栈,而符号和语法分类都被放置在该栈中。当语法分类<S>位于栈顶时,首先要确定正确的产生式。然后用所选产生式的右部替换<S>,其中右部的左端位于栈顶。如果是终结符位于栈顶,就要确定它是否与当前输入符号匹配。如果是,我们就将其弹出栈并前移输入游标。

要从直觉上了解这种安排为何起作用,先假设递归下降分析器刚调用过对应语法分类<S>的函数S,而且选定的产生式右部为a<B><C>。那么对应S的这一活动记录会在以下4个时候处于活动状态。

1. 在检验a是否在输入中时;

2. 在进行对B 的调用时;

3. 在该调用返回而且C 被调用时;

4. 在对C 的调用返回而且S 完成调用时。

如果我们在表驱动分析器中直接用右部的符号(本例中是a<B><C>)替换<S>,那么该活动记录栈会在控制权返回对应递归下降分析器中S 的活动时的输入位置曝光这些符号。

1. 第一次曝光的是a,而且我们会检测a是否在输入中,就像函数S 所做的那样。

2. 第二次,紧接第一次之后发生,S 会调用B,而<B>会位于栈顶,这会造成相同的行为。

3. 第三次,S 调用C,不过这里是<C>在栈顶,而且完成的是相同的工作。

4. 第四次,S 返回,而且我们不会发现更多替代<S>的符号。因此,活动记录栈中此点以下的符号之前存放在<S>中,但现在被暴露在外了。类似地,在S 的活动记录以下的活动记录在递归下降分析器中会得到控制权。

11.7.1 分析表

如果不想写一系列的递归函数,也可以构建分析表(parsing table),它的每一行都对应着语法分类,每一列对应着可能的前瞻符号。在表示语法分类<S>的那一行中,对应前瞻符号X 的项是前瞻符号为X 时展开<S>必须用到的以<S>为左部的产生式的编号。

分析表中的某些项可能为空。假设需要展开的语法分类<S>,而且前瞻符号为X,但我们发现表示<S>的那行中对应X 的那一项为空,就说明分析已经失败了。这种情况下,可以确定该输入不在此语言中。

示例 11.10

图11-31表示了对应图11-25所示平衡括号串无二义文法的分析表。该分析表相当简单,因为其中只有一个语法分类。该表所表示的策略与11.6节中的示例所采用的策略是相同的。如果前瞻符号是(,那么展开时用到的是产生式(2),也就是<B>→(<B>)<B>,否则展开时就要借助产生式(1),或者说<B>→ε 。我们很快就会看到这样的分析表是如何使用的。

 

(  )

ENDM

<B>

2  1

1

图 11-31 对应平衡括号串文法的分析表

示例 11.11

图11-32所示的是另一个分析表,它对应着图11-33所示的文法,该文法是图11-6所示语句文法的一个变种。

 

w

c

{

}

s

;

ENDM

<S>

1


2


3



<T>

4


4

5

4



图 11-32 对应图11-33所示文法的分析表

图11-33中的文法之所以具有这种形式,是为了可以用递归下降(或者等价地,用这里描述的表驱动分析算法)进行分析。要知道为什么这种形式是必要的,首先考虑一下图11-6所示文法中对应<L>的产生式。

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

如果当前的输入是开始语句的s这样的终结符,那么可知<L>一定至少由右部为<L><S>第一个生成式展开一次。不过,如果不检查接下来的输入并弄清语句列中共有多少条语句,就没法确定要进行多少次展开。

(1) <S> → w c<S>
(2) <S> → { <T>
(3) <S> → s ;
 
(4) <T> → <S><T>
(5) <T> → }

图 11-33 可进行递归下降分析的、表示简单语句的文法

我们在图11-33中用到的方法是,记住程序块是由左花括号后面跟上0条或更多语句以及右花括号组成的。我们把这0条或更多语句以及右花括号称为“尾部”(tail),并用语法分类<T>表示它。图11-33中的产生式(2)说明,语句可以由左花括号后面加上尾部构成。产生式(4)和产生式(5)则表示尾部要么是语句后面跟上尾部,要么直接就是个右花括号。

决定用产生式(4)还是产生式(5)展开<T>是件非常简单的事。只有在右花括号是当前输入时,产生式(5)才行得通,而产生式(4)只在当前输入可以开始语句时才有效。在我们的简单文法中,开始语句的终结符只有w{s。因此,在图11-32中可以看到,在对应语法分类<T>的那行中,为这3个前瞻符号选择了产生式(4),而为前瞻符号}选择了产生式(5)。对其他的前瞻符号而言,我们不可能用它们作为尾部的开头,所以就要在对应<T>的那行中把对应其他前瞻符号的位置留空。

同样,语法分类<S>的决定也很简单。如果前瞻符号为w,那么只有产生式(1)能起作用。如果前瞻符号为{,产生式(2)就是唯一可行的选择。而对前瞻符号s来说,只有产生式(3)是可行的。对其他前瞻符号来说,相应的输入是没法形成语句的。这些结论解释了图11-32中对应<S>的那一行。


三河申请400电话费用三河企业全国热线电话办理三河开通400电话电信价格、三河微信公众号代运营外包托管、三河网店编辑装修美工、三河网站推广优化大概需要多少钱

上一页:三河400电话申请开通【三河企业网站建设】三河微信公众号小程序开发运营价格、三河微信公众号APP软件客户端设计运营、三河网页页面设计公司费用、三河公司网站制作方案流程改版维护大概需要多少钱

下一页:磁县网站建设【磁县网络公司】磁县做网站、磁县微信公众号开发、磁县网站设计、磁县小程序制作

想要建网站,请留言,我们的工作人员将尽快与您联系!
  
400-111-6878

备案号: 苏ICP备11067224号-4

CopyRight © 2005-2020 上往建站 All Right Reserved 未经许可不得复制转载

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

  网址: https://www.768800.com

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

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

预约专家

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

  

全国服务热线:400-111-6878