编译原理第六章习题答案

合集下载

《编译原理》(陈火旺版)课后作业参考答案ch6-10

《编译原理》(陈火旺版)课后作业参考答案ch6-10

第6章属性文法和语法制导翻译7. 下列文法由开始符号S产生一个二进制数,令综合属性val给出该数的值:试设计求的属性文法,其中,已知B的综合属性c, 给出由B产生的二进位的结果值。

例如,输入时,=,其中第一个二进位的值是4,最后一个二进位的值是。

【答案】11. 设下列文法生成变量的类型说明:(1)构造一下翻译模式,把每个标识符的类型存入符号表;参考例。

【答案】第7章语义分析和中间代码产生1. 给出下面表达式的逆波兰表示(后缀式):【答案】3. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。

【答案】间接码表:(1)→(2)→(3)→(4)→(1)→(5)→(6)4. 按节所说的办法,写出下面赋值句A:=B*(-C+D) 的自下而上语法制导翻译过程。

给出所产生的三地址代码。

【答案】5. 按照7.3.2节所给的翻译模式,把下列赋值句翻译为三地址代码:A[i, j]:=B[i, j] + C[A [k, l]] + d[ i+j]【答案】6. 按7.4.1和节的翻译办法,分别写出布尔式A or ( B and not (C or D) )的四元式序列。

【答案】用作数值计算时产生的四元式:用作条件控制时产生的四元式:其中:右图中(1)和(8)为真出口,(4)(5)(7)为假出口。

7. 用7.5.1节的办法,把下面的语句翻译成四元式序列: While A<C and B<D do if A=1 then C:=C+1 else while A ≦D do A:=A+2; 【答案】第9章 运行时存储空间组织4. 下面是一个Pascal 程序:当第二次( 递归地) 进入F 后,DISPLAY 的内容是什么当时整个运行栈的内容是什么 【答案】第1次进入F 后,运行栈的内容: 第2次进入F 后,运行栈的内容: 109 87 6 5 4 3 2 1 017 1615 14 13 12 11 10 9 8 7 6 5第2次进入F 后,Display 内容为:5. 对如下的Pascal 程序,画出程序执行到(1)和(2)点时的运行栈。

编译原理一些习题答案

编译原理一些习题答案

第2章形式语言基础2.2 设有文法G[N]: N -> D | NDD -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9(1)G[N]定义的语言是什么?(2)给出句子0123和268的最左推导和最右推导。

解答:(1)L(G[N])={(0|1|2|3|4|5|6|7|8|9)+} 或L(G[N])={α| α为可带前导0的正整数}(2)0123的最左推导:N ⇒ ND ⇒ NDD ⇒ NDDD ⇒ DDDD ⇒ 0DDD ⇒ 01DD ⇒ 012D ⇒ 0123 0123的最右推导:N ⇒ ND ⇒ N3 ⇒ ND3 ⇒ N23 ⇒ ND23 ⇒ N123 ⇒ D123 ⇒ 0123268的最左推导:N ⇒ ND ⇒ NDD ⇒ DDD ⇒ 2DDD ⇒ 26D ⇒ 268268的最右推导:N ⇒ ND ⇒ N8 ⇒ ND8 ⇒ N68 ⇒ D68 ⇒ 2682.4 写一个文法,使其语言是奇数的集合,且每个奇数不以0开头。

解答:首先分析题意,本题是希望构造一个文法,由它产生的句子是奇数,并且不以0开头,也就是说它的每个句子都是以1、3、5、7、9中的某个数结尾。

如果数字只有一位,则1、3、5、7、9就满足要求,如果有多位,则要求第1位不能是0,而中间有多少位,每位是什么数字(必须是数字)则没什么要求,因此,我们可以把这个文法分3部分来完成。

分别用3个非终结符来产生句子的第1位、中间部分和最后一位。

引入几个非终结符,其中,一个用作产生句子的开头,可以是1-9之间的数,不包括0,一个用来产生句子的结尾,为奇数,另一个则用来产生以非0整数开头后面跟任意多个数字的数字串,进行分解之后,这个文法就很好写了。

N -> 1 | 3 | 5 | 7 | 9 | BNB -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B02.7 下面文法生成的语言是什么?G1:S->ABA->aA| εB->bc|bBc G2:S->aA|a A->aS解答:B ⇒ bcB ⇒ bBc⇒ bbccB ⇒ bBc⇒ bbBcc ⇒ bbbccc……A ⇒εA ⇒ aA ⇒ aA ⇒ aA ⇒ aaA ⇒ aa……∴S ⇒ AB ⇒ a m b n c n , 其中m≥0,n≥1即L(G1)={ a m b n c n | m≥0,n≥1} S ⇒ aS ⇒ aA ⇒ aaS ⇒ aaaS ⇒ aA ⇒ aaS ⇒ aaaA ⇒aaaaS ⇒ aaaaa ……∴S ⇒ a2n+1 , 其中n≥0即L(G2)={ a2n+1 | n≥0}2.11 已知文法G[S]: S->(AS)|(b)A->(SaA)|(a)请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。

编译原理附标准答案60861

编译原理附标准答案60861

第 2 章 习题2-1 设有字母表 A 1 ={a,b,c, ⋯,z} ,A 2 ={0,1, ⋯,9} ,试回答下 列问题:(1) 字母表 A 1上长度为 2 的符号串有多少个?(2) 集合 A 1A 2 含有多少个元素?(3) 列出集合 A 1(A 1∪A 2) *中的全部长度不大于 3 的符号串。

2- 2 试分别构造产生下列语言的文法:(1){a n b n |n ≥0};(2){a n b m c p |n,m,p ≥0};(3){a n #b n |n ≥ 0} ∪{c n #d n |n ≥0};( 4){w#w r # | w ∈{0,1} *,w r 是 w 的逆序排列 } ; ( 5)任何不是以 0 打头的所有奇整数所组成的集合;(6)所有由偶数个 0 和偶数个 1 所组成的符号串的集合。

2- 3 试描述由下列文法所产生的语言的特点: 1) S →10S0 S →aA A →bA A →a 2) S →SS S →1A0 A →1A0 A →ε 3) S →1A S →B0 A →1A A →CB → B0 B →C C →1C0 C →ε( 4)S →aSS S →a2- 4 试证明文法S →AB|DC A →aA|a B →bBc|bc C → cC|c D →aDb|ab 矚慫润厲钐瘗睞枥庑赖。

为二义性文法。

2- 5 对于下列的文法S→AB|c A → bA|a B →aSb|c试给出句子 bbaacb 的最右推导,并指出各步直接推导所得句型的句柄;指出句子的全部短语。

2- 6 化简下列各个文法(1)S →aABS|bCACd A → bAB|cSA|cCC B →bAB|cSB C → cS|c 聞創沟燴鐺險爱氇谴净。

(2)S → aAB|E A →dDA|e B → bE|fC→cAB|dSD|a D → eA E →fA|g(3)S → ac|bA A →cBC B →SA C → bC|d2-7 消除下列文法中的ε- 产生式(1)S →aAS|b A →cS| ε(2)S →aAA A →bAc|dAe| ε2-8 消除下列文法中的无用产生式和单产生式(1)S →aB|BC A →aA|c|aDb B →DB|C C →b D →B(2)S → SA|SB|A A → B|(S)|( ) B → [S]|[ ](3)E →E+T|T T → T*F|F F →P↑F|P P →(E)|i第 2 章习题答2- 1 答:(1)26*26=676(2)26*10=260(3) {a,b,c,...,z, a0,a1,...,a9, aa,...,az,...,zz,a00,a01,...,zzz}, 共有 26+26*36+26*36*36=34658 个残骛楼諍锩瀨濟溆塹籟。

编译原理及其习题解答(武汉大学出版社)课件chap6

编译原理及其习题解答(武汉大学出版社)课件chap6

练习1题目 练习 题目
文法G[T]: T→ F | T*F F →F ↑ P | P P→ (T) | i 证明T*P ↑(T*F)是文法G的一个句型,并 指出这个句型的所有短语、直接短语、 句柄。
编译原理 Compiler Principles
练习1 练习1解答
证明:T T*F T*F↑P T*F↑(T) 语法树: T T * F P F ↑ ( P T )
编译原理 Compiler Principles
练习2题目
设有文法G[S]: 设有文法 S →V1 V1→ V2 | V1iV2 V2→ V3 | V2+V3 V3→ )V1* | ( (1)给出 (+(i( 的最右推导,并画出相应的语法树; 给出 的最右推导,并画出相应的语法树; (2)证明 2+V3i( 是文法的一个句型,并指出这个句型的短语、直接 证明V 是文法的一个句型,并指出这个句型的短语、 证明 短语、句柄。 短语、句柄。
编译原理 Compiler Principles
非确定的自下而上的分析器
非确定的自下而上的分析器,是一般移进 归约方法 非确定的自下而上的分析器,是一般移进-归约方法 的抽象模型,可识别任何上下文无关语言。 的抽象模型,可识别任何上下文无关语言。给定一个上下 文无关文法,可构造一个自下而上的分析器。 文无关文法,可构造一个自下而上的分析器。 非确定的自下而上的分析器与非确定的自上而下的分 析器的不同之处: 析器的不同之处: 课本P147 课本
编译原理 Compiler Principles
自下而上分析法存在的问题
可归约串的问题;(∵ 该分析的每一步就是从当前串中找一 ;(∵
个子串( 个子串(称“可归约串”),将它归约到某个非终结符号) 可归约串”),将它归约到某个非终结符号) 将它归约到某个非终结符号 自下而上分析法的关键就是找哪个子串是“可归约串” 自下而上分析法的关键就是找哪个子串是“可归约串”, 关键就是找哪个子串是 哪个不是“可归约串” 例如上例中的(3) 哪个不是“可归约串”。例如上例中的

编译原理第6章习题与答案

编译原理第6章习题与答案

第6章习题6-1 将下列中缀式改写为逆波兰式。

(1) -A*(B+C)/(D-E)(2) ((a*d+c)/d+e)*f+g(3) a+x≤4∨(c>d*3)(4) a∨b∧c<d*e/f6-2 将下列逆波兰式改写为中缀式。

(1) abc*+(2) abc-*cd+e/-(3) abc+≤a0>∧ab+0≠a0<∧∨6-3 将下列语句翻译成四元式序列。

(1) X:=A*(B+C)+D(2) if A∧(B∨(C∨D)) then S1 else S2(3) while A<C∧B>0 doif A=1 then C:=C+1 else A:=A+26-4 设有二维PASCAL数组A[1··10,1··20]和三维PASCAL数组B[1··10, 1··20,1··30],给出赋值语句A[I,J]:=B[J,I+J,I+1]+X的四元式序列。

第5章习题答案6-1 解:(1) A-BC+*DE-/(2) ad*c+d/e+f*g+(3) ax+4≤cd3*>∨(4) abcde*f/<∧∨6-2 解:(1) a+b*c(2) a*(b-c)-(c+d)/e(3) a≤b+c∧a>0∨a+b≠0∧a<06-3 解:(1) (1) (+,B,C,T1)(2) (*,A,T1 ,T2)(3) (+,T2 ,D,T3)(4) (=,T3 ,0,X)(2) 如下所示:(1) (jnz,A,0,3);(2) (j,0,0,p+1);(3) (jnz,B,0,9);(4) (j,0,0,5);(5) (jnz,C,0,9);(6) (j,0,0,7);(7) (jnz,D,0,9);(8) (j,0,0,p+1);(9) 与S1相应的四元式序列(p) (j,0,0,q)(p+1) 与S2相应的四元式序列(q) …(3) 假设所产生的四元式序列编号从1开始(1) (j<A,C,3)(2) (j,0,0,13)(3) (j>,B,0,5)(4) (j,0,0,13)(5) (j=,A,1,7)(6) (j,0,0,10)(7) (+,C,1,T1)(8) (=,T1 , ,C)(9) (j,0,0,1)(10) (+,A,2,T2)(11) (=,T2 , ,A)(12) (j,0,0,1)(13) …6-4 解:(1) (*,I,20,T1)(2) (+,J,T1,T1)(3) (-,a A,C A ,T2)(4) (+,I,J,T3)(5) (*,J,20,T4)(6) (+,T3 ,T4 ,T4)(7) (+,I,1,T5)(8) (*,T4,30,T6)(9) (+,T5 ,T6 ,T6)(10) (-,a B,C B ,T7)(11) (=[],T7[T6],0,T8)(12) (+,T8 ,X,T9)(13) ([]=,T9 ,0,T2[T1])(注:(1)~(3)是计算下标变量A[I,J]XXX的四元式,T2中存放的是CONSTPART部分,而T1中存放的是VARPART部分,a A表示数组A的首XXX;(4)~(10) 是计算下标变量B[J,I+J,I+1]XXX的四元式,T7中存放的是CONSTPART 部分,而T6中存放的是VARPART部分,a B表示数组B的首XXX。

编译原理教程课后习题答案——第六章

编译原理教程课后习题答案——第六章

第六章运行时存储空间组织6.1 完成下列选择题:(1) 过程的DISPLAY表中记录了。

a. 过程的连接数据b. 过程的嵌套层次c. 过程的返回地址d. 过程的入口地址(2) 过程P1调用P2时,连接数据不包含。

a. 嵌套层次显示表b. 老SPc. 返回地址d. 全局DISPLAY地址(3) 堆式动态分配申请和释放存储空间遵守原则。

a. 先请先放b. 先请后放c. 后请先放d. 任意(4) 栈式动态分配与管理在过程返回时应做的工作有。

a. 保护SPb. 恢复SPc. 保护TOPd. 恢复TOP(5) 如果活动记录中没有DISPLAY表,则说明。

a. 程序中不允许有递归定义的过程b. 程序中不允许有嵌套定义的过程c. 程序中既不允许有嵌套定义的过程,也不允许有递归定义的过程d. 程序中允许有递归定义的过程,也允许有嵌套定义的过程【解答】(1) b (2) a(3) d (4) b (5) b6.2 何谓嵌套过程语言运行时的DISPLAY表?它的作用是什么?【解答】当过程定义允许嵌套时,一个过程在运行中应能够引用在静态定义时包围它的任一外层过程所定义的变量或数组。

也就是说,在栈式动态存储分配方式下的运行中,一个过程Q可能引用它的任一外层过程P的最新活动记录中的某些数据。

因此,过程Q运行时必须知道它的所有(静态)外层过程的最新活动记录的地址。

由于允许递归和可变数组,这些外层过程的活动记录的位置也往往是变迁的。

因此,必须设法跟踪每个(静态)外层的最新活动记录的位置,而完成这一功能的就是DISPLAY嵌套层次显示表。

也即,每当进入一个过程后,在建立它的活动记录区的同时也建立一张DISPLAY表,它自顶而下每个单元依次存放着现行层、直接外层等,直至最外层(主程序层)等每一层过程的最新活动记录的起始地址。

6.3 (1) 写出实现一般递归过程的活动记录结构以及过程调用、过程进入与过程返回的指令;(2) 对以return(表达式)形式(这个表达式本身是一个递归调用)返回函数值的特殊函数过程,给出不增加时间开销但能节省存储空间的实现方法。

编译原理(第2版)课后习题答案详解

编译原理(第2版)课后习题答案详解

第1 章引论第1 题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:源语言编写的程序称为源程序。

(3)目标程序:目标语言书写的程序称为目标程序。

(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。

答案:一个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。

编译原理作业题答案编译原理课后题答案

编译原理作业题答案编译原理课后题答案

第二章高级语言的语法描述6、令文法G 6为:N →D|ND D → 0|1|2|3|4|5|6|7|8|9(1)G 6 的语言L (G 6)是什么?(2)给出句子01270127、、34和568的最左推导和最右推导。

解答:思路:由N N →→ D|ND 可得出如下推导N =>=>ND ND ND=>=>=>NDD NDD NDD=>…=>=>…=>=>…=>D D n(n >=1=1))可以看出,N 最终可以推导出1个或多个(也可以是无穷)D ,而D D →→ 0|1|2|3|4|5|6|7|8|9可知,每个D 为0~9中的任一个数字,所以,中的任一个数字,所以,N N N 最终推导出的就是由最终推导出的就是由0~9这10个数字组成的字符串。

(1)G 6 的语言L (G 6)是由0~9这10个数字组成的字符串个数字组成的字符串,,或{0{0,,1,1,……,9}+。

(2)(2)句子句子01270127、、34和568的最左推导分别为的最左推导分别为: : N =>=>ND ND ND=>=>=>NDD NDD NDD=>=>=>NDDD NDDD NDDD=>=>=>DDDD DDDD DDDD=>=>=>0DDD 0DDD 0DDD=>=>=>01DD 01DD 01DD=>=>=>012D 012D 012D=>=>=>0127 0127 N =>=>ND ND ND=>=>=>DD DD DD=>=>=>3D 3D 3D=>=>=>34 34N =>=>ND ND ND=>=>=>NDD NDD NDD=>=>=>DDD DDD DDD=>=>=>5DD 5DD 5DD=>=>=>56D 56D 56D=>=>=>568 568 句子01270127、、34和568的最右推导分别为的最右推导分别为: :N =>=>ND ND ND=>=>=>N7N7N7=>=>=>ND7ND7ND7=>=>=>N27N27N27=>=>=>ND27ND27ND27=>=>=>N127N127N127=>=>=>D127D127D127=>=>=>0127 0127 N =>=>ND ND ND=>=>=>N4N4N4=>=>=>D4D4D4=>=>=>34 34N =>=>ND ND ND=>=>=>N8N8N8=>=>=>ND8ND8ND8=>=>=>N68N68N68=>=>=>D68D68D68=>=>=>568 5687、写一个文法,使其语言是奇数集,且每个基数不以0开头。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
产生式
语义规则
D→TL
L.in=T.type
T→int
T.type=integer
T→real
T.type=real
L→L1,id
L1.in=L.in Addtype(id.entry,L.in)
L→id
Addtype(id.entry,L.in)
D
T.type=real
L.in=real
real
L.in=real ,
例6.3 属性文法为例6.1中的属性文法,输入:3*5+4n
L
Eval:=19
n
Eval:=15
+
Tval:=4
Tval:=15
Tval:=3 Fval:=3
*
Fval:=5
digitlexval:=5
Fval:=4 digitlexval:=4
digitlexval:=3
上一页
下一页
10
例6.4 继承属性的类型说明文法
▪ 深刻理解:属性,综合属性,继承属性,依赖图,计算 顺序,语法树,语法制导定义,S-属性文法定义,L-属 性文法定义,翻译模式。
▪ 熟练掌握:对于已知文法G和翻译任务,构造其L-属性 定义,将其改造成适于自顶向下分析或自底向上分析的 翻译模式。
上一页
下一页
3
本章教学线索
1 属性文法(属性翻译文法)
… 规则n
… 相关的属性等式/语义规则
上一页
下一页
7
例6.1 一个简单台式计算器的属性文法
产生式 L→En E→E1+T E→T T→T1*F T→F F→(E) F→digit
语义规则 Print(E.val) E.val =E1.val+T.val E.val=T.val T.val=T1.val*F.val T.val=F.val F.val=E.val F.val=digit.lexval
上一页
下一页
5
1.1 属性文法的概念
(1)属性文法的定义 在上下文无关文法的基础上,为每个文法符号(终 结符和非终结符)配备若干相关的“值”(也称: “属性”),对于文法的每个产生式都配备了一组属 性的计算规则(语义规则),这种文法称为属性文法。 1968年,Knuth首先提出。
说明:在一般情况下,整个属性文法是非常复杂的。但 属性的函数关系却通常非常简单。属性也很少依赖于 大量的其它属性,因此可以将相互依赖的属性分割成 较小的独立属性集,然后单独对每一属性集写出一个 属性文法。
上一页
下一页
8
例6.2:无符号整数的属性文法
文法规则
语义规则
Number1→Number2digit Number→digit digit→0 digit→1 digit→2 digit→3 digit→4 digit→5 digit→6 digit→7 digit→8 digit→9
Number1.val=number2.val*10+digit.val Number.val=digit.val digit.val=0 digit.val=1 digit.val=2 digit.val=3 digit.val=4 digit.val=5 digit.val=6 digit.val=7 digit.val=8 digit.val=9
编译原理电子教案 第六章 属性文法和语法制导翻译
本章的主要内容
▪ 属性文法和语法制导的翻译的概念 ▪ 综合属性和继承属性的概念、特点 ▪ S-属性文法与L-属性文法的概念及分析方法 ▪ 翻译模式 ▪ 递归下降翻译器的设计
上一页
下一页
2
本章要求
▪ 知识点:语法制导定义,S-属性定义及其自底向上计算 属性,L-属性定义,自顶向下的翻译,自底向上计算继 承属性。
Ø 产生式左边的继承属性和产生式右边的文法符号的综合属性由其它产 生式的属性规则计算。
Ø 一个句型的语法树可以加以扩充,用来表示句型分析中得到的各个符 号的属性间的关系:
语法树中,一个结点的综合属性的值由其子结点的属性值确定
上一页
下一页
9
1.2 属性的分类
• 综合属性:用于自下而上传递信息;在语法树中,一个结点的综合属性由其子 结点的属性值确定,因此,通常使用自底向上的方法在每一个结点处使用语义规 则计算综合属性的值。仅仅使用综合属性的属性文法称S-属性文法。 • 继承属性:用于自上而下传递信息;在语法树中,一个结点的继承属性由此结 点的父结点和/或兄弟结点的某些属性确定。
1.1 属性文法的概念 1.2 属性的分类 1.3 属性的计算规则
2 基于属性文法的处理办法 3 S-属性文法的自下而上计算 4 L-属性文法和自顶向下翻译 5 自下而上计算文法)
语法制导翻译:通过给语法树上各个符号赋予一定的含义 并且将各个符号进行有结构的连接,可以形成语言的具 体语句的含义。这给予我们以启示:可以通过扩充文法, 在文法符号上附着某些语义信息,并在这些语义信息间建 立相互计算关系,从而在语法分析的同时进行语义分析。 由于这种分析是在语法分析的控制下进行的,故称为语法 制导翻译。
上一页
下一页
12
注意:
Ø 如果同一文法符号在文法规则中出现不止一次,那么每次必须用合适 的下标与在其他地方出现的符号区分开来。
Ø 终结符只有综合属性,它们由词法分析器提供。
Ø 非终结符既可有综合属性也可有继承属性,文法开始符的所有继承属 性为属性计算前的初始值。
Ø 属性计算规则中仅能使用相应产生式中文法符号的属性(封装性)。
L.in=real , id2
id1
id3
real id1,id2,id3
上一页
下一页
11
1.3 属性的计算规则
属性的计算规则:设有产生式A→ 定义 b= f(c1,c2,……,ck )f是一个计算函数,并且 (1)b是A的一个综合属性,并且c1,c2,……,ck是产 生式右边文法符号的属性。或者: (2)b是产生式右边某文法符号的一个继承属性,并且 c1,c2,……,ck是A或产生式右边任何文法符号的属性。
上一页
下一页
6
(2)属性(Attribute)是编程语言结构的任意特性。属性在其包含 的信息和复杂性等方面变化很大。属性的典型例子有:
• 变量的数据类型 • 表达式的值 • 存储器中变量的位置 • 程序的目标代码 • 数的有效位数 (3)属性文法一般表示方法:
文法规则
语义规则
规则1 规则2
相关的属性等式/语义规则 相关的属性等式/语义规则
相关文档
最新文档