- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理典型案例
对于文法G[S]
S →(L)
S→aS
S→a
L →L,S
L→S
(1) 画出句型 (S,(a)) 的语法树;
(2) 写出上述句型的所有短语、直接短语、句柄和素短语。
解答
这类题目重点考查语法树、推导、短语、直接短语、句柄和素短语等基本概念。在句型中寻找短语、直接短语、句柄的方法:
(1) 画出句型对应的语法树。句型 (S,(a)) 的语法树如下图所示
(2) 在该语法树中寻找短语、直接短语、句柄。首先我们看短语的定义:令G是一个文法,S是文法的开始符,假设α,β,δ是文法G的句型,如果有
S*(αAδ 且 A +(β
则称β是句型αβδ相对于非终结符A的短语。如果有 A(β,则称β是句型αβ δ相对于规则A→β的直接短语。一个句型的最左直接短语称为该句型的句柄。根据短语的定义可知,以非终结符A为根的子树的叶结点从左到右排列就是相对于非终结符A的短语;如果子树只有两代,则短语就是直接短语;最左边的两代子树的所有叶结点从左到右排列,就是该句型的句柄。素短语是一个短语,它至少包含一个终结符,且除自身外不再包含其他素短语。处于句型最左边的素短语为最左素短语。
从语法树中我们可以找到:
短语:a,S,(a), S, (a), (S, (a))
直接短语:a,S
句柄:S
素短语:a
写一个上下文无关文法,使其语言能被5整除且不以0开头头
其中,A代表可以出现在个位上的数字,只能是0或5;
B代表可以出现在开始位上的数字,除了0以外,其他数字都可以;
C代表可以出现在中间位上的数字。0-9所有数字都可以。
于是,A→0 | 5
B→1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
C→0 | B
写文法时,先描述一位数结构,于是有产生式S →5。对于两位数和多位数,都是以B开头→DA。用非终结符D推导出两位数和多位数中除个位数字以外的数字。对与多位数,由于中间位可以是许多位,必须使用递归技术来描述其结构。于是有产生式:
D→DC
D→B
因此,所求文法为G[S]:
S →5
S→DA
D→DC
D→B
A→0 | 5
B→1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
C→0 | B
写一个文法G, 使其语言为 不以0开头的偶数集。不以0开头的偶数集
其中,A代表可以出现在个位上的数字,可以是2,4,6,8,但不能是0;
B代表可以出现在开始位上的数字,除了0以外,其他数字都可以;
C代表可以出现在中间位上的数字。0-9所有数字都可以。
于是,A→2 | 4 | 6 | 8
B→0 | A
C→1 | 3 | 5 | 7 | 9 | A
D→0 | C
写文法时,先描述一位数结构,于是有产生式S →A。对于两位数和多位数,都是以C开头→CE。用非终结符E推导出两位数和多位数中除个位数字以外的数字。对与多位数,由于中间位可以是许多位,必须使用递归技术来描述其结构。于是有产生式:
E→CE
E→B
因此,所求文法为G(S):
S→A | CE
E→CE | B
A→2 | 4 | 6 | 8
B→0 | A
C→1 | 3 | 5 | 7 | 9 | A
D→0 | C
4. 考虑下面的程序:
???? …
?procedure (x, y, z);
begin
y:=y+1;
z:=z+x
end;
begin
a:=2;
b:=3;
P(a+b, a, a);
print a
end.
试问,若参数传递的方式分别采用传值传地址时,程序执行后输出 的值是什么? 传递
但过程P无法改变实参a的值。因此,程序执行后输出 的值
过程调用后,形参x的形式单元指向存a+b值的临时变量的地址,形参y的形式单元指向变量a的地址,形参z的形式单元指向变量b的地址。形参通过指针可以间接访问实参。
执行y:=y+; 后,实在参数的变化:
执行z:=z+x;
因此,程序执行后输出 的值
执行:=y+1; 后,实参和的形参的变化:
执行:=z+x; 后,实参和的形参的变化:
过程工作完成返回之前必须把第二个单元的内容存放到第一个单元所指的那个实参单元之中。实参和的形参的变化:
因此,程序执行后输出 的值执行:=y+1;语句,实现时处理成为:
a=a+1;
过程体执行:=z+x;语句,实现时处理成为:
a=a+(a+b);
执行上述两语句后,a的值程序执行后输出 的值a的输出:
(1)传值: 2
(2)传地址: 8
(3)得结果: 7
(4)传名: 9
5. 已知文法G[S]
S→S*aP | aP
文档评论(0)