发表日期: 2021-04-20 14:20:53 浏览次数:70
沧县网站制作【沧县网站优化】沧县建网站、沧县微信公众号运营、沧县网页设计、沧县微信小程序商城
沧县,隶属于河北省沧州市,位于位于河北省东南部、冀中平原东部。全县总面积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月,入选河北省食品产业强县(市、区)(培育型)名单。
3. * 扩展该无二义表达式文法,允许=
、<=
等比较运算符,这些比较运算符都具有同样的优先级而且是左关联的,它们的优先级在+和-之下。
4. 扩展图11-22中的表达式文法,使其包含一元减号。请注意,这一运算符的优先级要比其他运算符的优先级更高,例如,-2*-3
就被组合为(-2)*(-3)
。
5. 扩展习题3中得出的文法,已包含逻辑运算符&&
、||
和!
。其中&&
和*
有着相同优先级,而||
的优先级与+
相同,而!
的优先级则比一元的-更高。&&
和||
这两个二元运算符都是从左起组合的。
6. * 不是每个表达式按照11.2节图11-2所示的二义性文法都有一棵以上的分析树。给出一些根据该文法只有唯一分析树的表达式。大家能否给出一条规则,说明什么时候表达式会具有唯一的分析树?
7. 以下文法定义了只有0
和1
组成的字符串的集合(不含ε)。
<字符串>→<字符串><字符串> | 0
| 1
在该文法中,字符串010有几棵分析树?
8. 给出与习题7中文法具有相同语言的无二义文法。
9. * 文法(11.1)对空串来说有多少分析树?给出对应空串的3种不同的分析树。
文法和正则表达式一样,都可以描述语言,但都不能直接给出算法来确定某字符串是否在所定义的语言中。对正则表达式来说,我们在第10章中已经了解到如何先把正则表达式转换成非确定自动机,接着转换成确定自动机,而这一确定自动机就可以直接实现为程序。
对文法来说,也存在多少有些相似的处理过程。一般来说,根本不可能把文法转换成确定自动机,在11.7节中我们会讨论一些可以进行这种转换的例子。不过,通常可以把文法转换成类似自动机的程序,从头至尾读取输入,并呈现该输入字符串是否在该文法的语言中的决策。这类技术中最重要的就是“LR分析”(LR代表从左至右扫描输入),但它不在本书要讨论的范围之内。
这里要介绍的是一种更加简单但不那么强大的分析技术——“递归下降分析”,在这种分析中,文法会被一系列相互递归的函数替代,每个递归函数都对应文法中的一个语法分类。对应语法分类<S>的函数S 的目标是读入构成语言L(<S>)中字符串的字符序列,并返回指向该字符串分析树根节点的指针。
产生式的右部可以看作找到左部的语法分类中的字符串所必须满足的一系列目标——终结符和语法分类。例如,考虑表示平衡括号串的无二义文法,我们在图11-25中将其重现。
(1) <B> → ε
(2) <B> → ( <B> ) <B>
图 11-25 表示平衡括号串的文法
产生式(2)表述了弄清平衡括号串是否依次满足以下4个条件的一种方法。
1. 找到字符(
;
2. 然后找到平衡括号串;
3. 然后找到字符)
;
4. 最后找到另一个平衡括号串。
一般而言,如果发现某终结符是下一个输入符号,终结符的目标就得到满足了,但如果下一个输入符号是其他内容,这一目标就不会被满足了。要弄清右部中的语法分类是否得到满足,可以调用对应该语法分类的函数。
根据文法构建分析树的安排如图11-26所示。假设要确定某终结符序列X1X2…Xn 是否为语法分类<S>中的字符串,而且如果是还要给出它的分析树。然后我们在输入文件中放入X1X2…Xn ENDM
,其中ENDM
是一个不属于终结符的特殊符号。2ENDM
叫作端记号(endmarker),它的作用是表示待检查的整个字符串已经被读入了。例如,在C语言程序中,通常会使用EOF或EOS字符作为端记号。
2在实际用于编程语言的编译器中,整个输入可能不是一次性放入一个文件中的,而是由每次检查源程序中一个字符的“词法分析器”这种预处理器一次找到一个终结符。
X1 X2 … Xn ENDM
↑
调用S
图 11-26 初始化在输入中发现<S>的程序
输入游标(input cursor)标记了要被处理的终结符,也就是当前的终结符。如果输入是字符串,那么游标可以是指向字符的指针。分析程序首先要调用对用语法分类<S>的函数S,而且输入游标是在输入的开头位置。
每当处理产生式右部,并在产生式中遇到终结符a
的时候,就要在输入游标指示的位置查找相匹配的终结符a
。如果找到a
,就把输入游标移至输入中的下一个终结符。如果当前的终结符是a
之外的内容,就是匹配失败,就不能为该输入字符串给出分析树。
另一方面,如果处理产生式右部并遇到了语法分类<T>,就要调用与<T>对应的函数T。如果T“失败”,那么整个分析也失败,而该输入就被视为不在待分析的语言中。如果T 成功,它就会“消灭”某一输入,把输入游标向前移动对应该输入的0个或更多位置。从T 被调用时的位置直到T 离开游标之前的位置都要被销毁。T 还会返回一棵树,就是与该被销毁输入对应的分析树。
当我们处理完产生式右部中的各个符号后,就要为该产生式表示的那部分输入生成分析树。要完成这一工作,就需要创建一个新的根节点,并以该产生式的左部作为其标号。该根节点的子节点是成功调用与右部中语法分类对应的函数所返回的树的根节点,而且要为右部中的每个终结符创建相应的叶子节点。
现在来考虑一个扩展过的例子,看看如何为图11-25所示文法中的语法分类<B>设计递归函数B。在某个输入位置被调用的函数B,会销毁从那个位置开始的某个平衡括号串,并把输入光标留在紧临该平衡括号串之后的那个位置。
难点在于,要满足确定<B>这一目标,到底是使用可以立即成功的产生式(1),<B>→ε,还是使用产生式(2),也就是<B>→(<B>)<B>。而我们要遵循的策略是,只要下一个终结符为(,就使用产生式(2),只要下一个终结符是)或是端记号,就使用产生式(1)。
备案号: 苏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