发表日期: 2021-04-20 14:22:32 浏览次数:107
沧县微信公众号开发【沧县网络推广】沧县建站、沧县网站维护、沧县网页制作、沧县微信小程序代运营公司
沧县,隶属于河北省沧州市,位于位于河北省东南部、冀中平原东部。全县总面积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月,入选河北省食品产业强县(市、区)(培育型)名单。
函数B如图11-27b所示,在它之前的图11-27a中是一些重要的辅助要素,这些元素包括以下几点。
1. 常量FAILED
被定义为函数B 没能在输入中找到平衡括号串时的返回值。FAILED
的值与NULL
相同。后者的值也表示一棵空树。不过,如果B成功的话,它返回的分析树不会为空,所以FAILED
的这一定义是不可能有二义性的。
2. 类型NODE
和TREE
的定义。节点是由标号字段(字符),以及指向最左子节点和右兄弟节点的指针组成的。标号‘B
’表示标号为B 的节点,‘(
‘和’)
’分别表示标号为左括号和右括号的节点,而‘e
’则表示标号为ε 的节点。与5.3节中最左子节点右兄弟节点结构不同的是,这里为指向节点的指针选择的类型是TREE
而非pNODE
,因为这里的这些指针多用来作为树的表示。
3. 下面要描述的3个辅助函数和函数B 的原型声明。
4. 两个全局变量。第一个是parseTree
,存放着由对B 的第一次调用返回的分析树。第二个是nextTerminal
,它是输入游标,指向输入终结符串中的当前位置。请注意,nextTerminal
具有全局性是很重要的,这样当B的一次调用返回时,输入游标所在的位置对执行这次调用的B的副本而言就是已知的。
5. main
函数。在这一简单的演示中,main
将nextTerminal
置为指向特定测试串()()
开头的位置,而且调用B 的解雇被放置在parseTree
中。
6. 3个辅助函数可以创建树节点,而且,如果需要的话,可以组合子树以形成更大的树。它们分别是
(a) makeNode 0(x)函数创建的节点没有子节点,也就是说,它创建的是叶子节点,而且用符号x 作为该叶子节点的标号。返回的是由这一个节点组成的树。
(b) makeNode 1(x,t )函数创建的节点具有一个子节点。新节点的标号为x,而且其子节点是树t 的根节点。返回的是根节点为所创建节点的树。请注意,makeNode1
要利用makeNode0
创建根节点,然后让树t 的根节点成为所创建根节点的最左子节点。我们假设所有的最左子节点和右兄弟节点指针一开始都是NULL
,而且它们就是,因为它们都是由makeNode0
创建的,该函数显然将它们置为了NULL
。因此,makeNode1
并不一定要把NULL
存储到树t 根节点的rightSibling
字段中,不过这样做是明智的安全之举。
(c) 函数makeNode 4(x,t1,t2,t3,t4)创建的节点具有4个子节点。该节点的标号是x,而其子节点按照从左到右的次序分别是树t1、t2、t3和t4的根节点,返回的是用所创建节点作为根节点的树。请注意,makeNode4
要利用makeNode1
创建一个新的根节点,并将t1附加到该节点上,然后用右兄弟节点指针把其余的树串联起来。
#define FAILED NULLtypedef struct NODE *TREE;struct NODE { char label; TREE leftmostChild, rightSibling;};TREE makeNode0(char x);TREE makeNode1(char x, TREE t);TREE makeNode4(char x, TREE t1, TREE t2, TREE t3, TREE t4);TREE B();TREE parseTree; /* 存放分析的结果 */char *nextTerminal; /* 输入字符串中的当前位置 */void main(){ nextTerminal = "()()"; /* 在实际应用中,终结符串是从输入读取的 */ parseTree = B();}TREE makeNode0(char x){ TREE root; root = (TREE) malloc(sizeof(struct NODE)); root->label = x; root->leftmostChild = NULL; root->rightSibling = NULL; return root;}TREE makeNode1(char x, TREE t){ TREE root; root = makeNode0(x); root->leftmostChild = t; return root;}TREE makeNode4(char x, TREE t1, TREE t2, TREE t3, TREE t4){ TREE root; root = makeNode1(x, t1); t1->rightSibling = t2; t2->rightSibling = t3; t3->rightSibling = t4; return root;}复制代码
图11-27(a) 递归下降分析器的辅助函数
TREE B() { (1) TREE firstB, secondB; (2) if(*nextTerminal == '(') /* 遵循产生式2 */ { (3) nextTerminal++; (4) firstB = B(); (5) if(firstB != FAILED && *nextTerminal == ')') { (6) nextTerminal++; (7) secondB = B(); (8) if(secondB == FAILED) (9) return FAILED; else(10) return makeNode4('B', makeNode0('('), firstB, makeNode0(')'), secondB); } else /* 对B的第一次调用失败了 */(11) return FAILED; } else /* 遵循产生式 1 */(12) return makeNode1('B', makeNode0('e')); }
备案号: 苏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