L-属性文法和自顶向下翻译(1)
属性文法的名词解释

属性文法的名词解释属性文法(Attribute Grammar)是一种形式化的文法,用于描述计算机程序中的语法结构和语义信息之间的关系。
它是上下文无关文法(Context-Free Grammar)的扩展,引入了属性(Attribute)的概念,用于描述语法结构的特性和语义信息的传递。
属性文法的定义包括两个部分:语法规则和属性定义。
语法规则描述了语法结构的产生方式,属性定义则指定了每个语法结构的属性计算方式。
在属性文法中,语法结构可以是终结符、非终结符和属性。
终结符是语法中不可再分的最基本元素,例如数字、运算符等。
非终结符定义了可扩展的语法结构,例如表达式、语句等。
属性则用于描述语法结构的特性。
一个语法结构可以有多个属性,例如,一个表达式可以包含属性值、数据类型等。
属性文法中的语法规则由产生式表示。
产生式(Production)定义了从一个语法结构生成另一个语法结构的方式。
每个产生式都有一个左部和右部。
左部是一个非终结符,右部是由终结符、非终结符和属性组成的序列。
产生式的右部可以包含语义规则,用来计算属性值。
属性文法中的属性定义规定了每个语法结构的属性计算方式。
一个属性可以是综合属性(Synthesized Attribute)或继承属性(Inherited Attribute)。
综合属性定义了由当前语法结构计算的属性值,它的值只依赖于当前语法结构自身和它的子结构。
继承属性定义了由当前语法结构的父结构计算的属性值,它的值依赖于父结构的属性值和兄弟结构的属性值。
在属性文法的计算过程中,首先对终结符和非终结符的属性进行初始化。
然后按照产生式进行属性传递和计算。
属性传递分为自顶向下和自底向上两种方式。
自顶向下传递属性规定了属性值从父结构向子结构计算传递的方式,自底向上传递属性规定了属性值从子结构向父结构计算传递的方式。
属性文法的应用领域广泛。
在编译原理中,属性文法被用于描述语言的语法和语义。
它可以通过属性计算的方式对程序进行语义分析和优化。
编译原理6-4.2-4.3- 自顶向下翻译-递归下降翻译

对于自顶向下分析, 对于自顶向下分析,我们假定动作是在处于相同位 置上的符号被展开 匹配成功)时执行的。 被展开( 置上的符号被展开(匹配成功)时执行的。
E T.val=9 num.val=9 R.i=9 - T.val=5 num.val=5 + R.i=4 T.val=2 R.i= 6 ε
num.val=2
图6.15
计算表达式 9 – 5 + 2
下面我们把转换左递归翻译模式的方法推广到一 以便进行自顶向下分析。 般,以便进行自顶向下分析。 假设我们有下面的翻译模式, 假设我们有下面的翻译模式,它的每个文法符号 都有一个综合属性,用小写字母表示, 和 是任 都有一个综合属性,用小写字母表示,g和f是任 意函数。 意函数。
procedure R; begin if sym = addop then begin advance; T; R end else begin /* 什么也不做 */ * end end; 产生式R 图6.19 产生式 → addop TR | ε 的分析过程
function R (in :↑ AST-node) :↑ AST-node; var nptr , i1, s1, s : ↑ AST-node; addoplexeme : char; begin if sym = addop then begin /* 产生式 R → addop T R */ nptr: T.nptr addoplexeme := lexval; i1: R1.i advance; s1: R1.s nptr := T; s: R.s i1 := mknode(addoplexme, in , nptr) ; s1 := R (i1); addoplexeme: s : = s1 addop (+|-) end else s := in; /* 产生式 R → ε */ return s end; 图6.20 递归下降构造抽象语法树
西理工编译原理试题集1-7

01-普通作业一(第一章)一、选择题(从备选项中选出一个或多个正确答案)。
1. 编译程序的源程序是高级语言编写的程序,目标程序是编写的程序。
A. 高级语言B. 汇编语言C. 机器语言D. 汇编语言或机器语言2. 编译程序是对进行翻译。
A. 高级语言B. 汇编语言C. 机器语言D. 自然语言3. 如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两个阶段。
A. 编译B. 汇编C. 运行D. 预处理4. 编译的工作过程一般划分为词法分析、、语义分析、中间代码生成、代码优化和目标代码生成若干阶段。
A. 表格管理B. 出错处理C. 语法分析D. 预处理5. 词法分析阶段的主要任务是识别。
A. 表达式B. 单词C. 语句D. 词组二、判断题(对于下列陈述中正确的说法选择回答“对”,否则选择回答“错”)。
1. 编译程序是一种常见的应用软件。
2. C语言的编译程序可以用C语言编写。
3. 编译方式与解释方式的区别之一在于是否生成目标程序。
4. 中间代码生成是编译程序不可或缺的部分。
5. 含有优化的编译程序执行效率高。
三、解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍四、一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
五、何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系?参考答案:一、选择题1. D2. A3. AC4. C5. B二、判断题1.错2.对3.对4.错5.错三、(1)把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言书写的目标程序的翻译程序。
(2)源程序,是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件。
(3)为源程序经编译可直接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名。
(4)编译程序的前端通常指:词法分析、语法分析、语义分析等生成最终代码以前的一系列步骤。
编译原理作业集-第六章-修订

第六章属性文法和语法制导翻译本章要点1. 属性文法,基于属性文法的处理方法;2. S-属性文法的自下而上计算;3. L-属性文法的自顶向下翻译;4. 自下而上计算继承属性;本章目标掌握和理解属性方法、基于属性文法的处理方法、S-属性文法和自下而上计算、L-属性文法和自顶向下翻译、自下而上计算继承属性等内容。
本章重点1.语法制导翻译基本思想。
2.语义规则的两种描述方法:语法制导的定义和翻译方案。
语法制导的定义没有指明语义规则的计算次序,而翻译方案显式给出语义规则(或叫语义动作)的计算次序和位置。
3.基于属性文法的处理方法,综合属性定义(S属性定义)和L属性定义。
4.设计简单问题的语法制导定义和翻译方案,这是本章的重点和难点。
这种设计可看成是一种程序设计,是一种事件驱动形式的程序设计,因此它比一般的编程要难得多。
这里的事件是句子中各种语法结构的识别。
5.语义规则的三种计算方法:分析树方法、基于规则的方法和忽略规则的方法。
6.S属性的自下而上计算(边语法分析边属性计算,忽略规则的方法)。
7.L属性的自上而下计算(边语法分析边属性计算,忽略规则的方法)。
8.递归计算(先语法分析后属性计算,基于规则的方法)。
本章难点1. 设计简单问题的语法制导定义和翻译方案;作业题一、单项选择题:1. 文法开始符号的所有________作为属性计算前的初始值。
a. 综合属性b. 继承属性c. 继承属性和综合属性d. 都不是2. 对应于产生式A→XY继承属性Y.y的属性计算,可能正确的语义规则是________。
a. A.a:=f(X.x,Y.y);b. )Y.y:=f(A.a,Y.y);c. Y.y:=f(X.x);d. A.a:=f(Y.y);3. 描述文法符号语义的属性有两种,一种称为__ __,另一种称为__ ___。
a. L-属性b. R-属性c. 综合属性d. 继承属性4. 出现在产生式________和出现在产生式________不由所给的产生式的属性计算规则进行计算,而是由其他产生式的属性规则计算或者由属性计算器的参数提供。
编译原理习题课(3)

四元式序列: (1) + (2) (3) + (4) * (5) + (6) + (7) -
a b T1 T1 - T2 c d T3 T2 T3 T4 a b T5 T5 c T6 T4 T6 T7
23
赋值语句的翻译
简单算术表达式及赋值语句 数组元素的引用 产生有关类型转换的指令
24
P218-4. 按7.3节所说的办法,写出下面赋值句
L→En print(E.val)
E→E1+T E.val := E1.val+T.val
E→T
E.val :=T.val
T→T1*F T.val :=T1.val* F.val
T→F
T.val :=F.val
F→ (E) F.val :=E.val
F→digit F.val :=digit.lexval
5
digit.lexval=4
E → T { R.i:=T.val } R { E.val:=R.s }
P164-2. 对表达式((a)+(b))R:→ +
(的1)抽按象照语表法6树.4所;示的属性文R 法→ TR构- 1{ {造RR1..该i:s=:=R表.Ri+1达T.s.v式}al }
(式2)的按抽照象图语6法.17树所。示的翻译R模→式TR1,{{ RR构1.s.i::=造=R{RR.该.ii-.}sT表:.=vaR达l }1.s }
综合属性:“自下而上”传递信息 继承属性性文法的处理方法
依赖图 树遍历 一遍扫描
L-属性文法适合于一遍扫描的自上而下分析 S-属性文法适合于一遍扫描的自下而上分析
4
L
P164–1按照表6.1所
教案-编译原理

课程名称:《编译原理》课程性质:专业课(必修)学时:48(理论教学)教材:(1)编译原理.李劲华等编,复旦大学出版社,2007年(2)编译原理(第2版)电子工业出版社,胡伦骏,骆婷编,2007年1.课程班级:软件工程11级1班,2班,3班教室:西教1—305授课时间:1-12周,星期二 8,9节、星期四 1,2节2.课程班级:计算机科学与技术11级1班,2班,3班,4班教室:西教1—304授课时间:1-12周,星期二3,4节、星期五 3,4节授课教师:张永考核方式:闭卷总评成绩=平时成绩(20%) + 期末考试成绩(80%)参考书1. Compilers: Principles, Techniques and Tools (2nd Edition). Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Addison Wesley; 20062. 程序设计语言编译原理(第三版),陈火旺、刘春林等,2000年,国防工业出版社,2002年获国家级高等学校优秀教材一等奖。
是国家“九五”重点建设教材。
3. 编译原理与技术,李文生,清华大学出版社,2008.73 程序语言的语法描述几个概念:考虑一个有穷字母表∑字符集其中每一个元素称为一个字符∑上的字(也叫字符串) 是指由∑中的字符所构成的一个有穷序列不包含任何字符的序列称为空字,记为ε用∑*表示∑上的所有字的全体,包含空字ε3.1 上下文无关文法文法:描述语言的语法结构的形式规则He gave me a book.<句子> <主语><谓语><间接宾语><直接宾语><主语> <代词><谓语> <动词><间接宾语> <代词><直接宾语> <冠词> <名词><代词> He<代词> me<名词> book<冠词> a<动词> gave上下文无关文法的定义:一个上下文无关文法G是一个四元式G=(VT,VN,S,P),其中VT:终结符集合(非空)VN:非终结符集合(非空),且VT VN=S:文法的开始符号,S VNP:产生式集合(有限),每个产生式形式为P , P VN, (VT VN)*开始符S至少必须在某个产生式的左部出现一次。
编译原理期末考试题目及答案

一、填空题(每空2分,共20分)1.编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。
2.编译器常用的语法分析方法有自底向上和自顶向下两种。
3.通常把编译过程分为分析前端与综合后端两大阶段。
词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。
4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。
5.对编译程序而言,输入数据是源程序,输出结果是目标程序。
1.计算机执行用高级语言编写的程序主要有两种途径:解释和编译。
2.扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。
3.自下而上分析法采用移进、归约、错误处理、接受等四种操作。
4.一个LL(1)分析程序需要用到一张分析表和符号栈。
5.后缀式abc-/所代表的表达式是a/(b-c)。
二、单项选择题(每小题2分,共20分)1.词法分析器的输出结果是__C。
A.单词的种别编码B.单词在符号表中的位置C.单词的种别编码和自身值D.单词自身值2.正规式M 1 和M 2 等价是指__C_。
A.M1和M2的状态数相等 B.M1和M2的有向边条数相等C.M1和M2所识别的语言集相等D.M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_C____。
A.xyx B.(xyx)* C.xnyxn(n≥0) D.x*yx*4.如果文法G是无二义的,则它的任何句子α_A____。
A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握____D__。
A.源程序B.目标语言C.编译方法D.以上三项都是6.四元式之间的联系是通过__B___实现的。
《编译原理》重点知识总结

《编译原理》知识点总结目录第一章引论第二章高级语言及其语法描述第三章语法分析——自上而下分析第四章属性文法和语法制导翻译第五章语义分析和中间代码产生第六章优化第一章引论一.编译程序(compiler):把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序二.编译程序的工作的五个阶段:词法分析、语法分析、中间代码产生、优化、目标代码产生1.词法分析任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。
依循的原则:构词规则描述工具:有限自动机FOR I := 1 TO 100 DO保留字标识符等符整常数保留字整常数保留字2.语法分析任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
依循的原则:语法规则述工具:上下文无关文法3.语义分析与中间代码产生任务:对各类不同语法范畴按语言的语义进行初步翻译。
(变量是否定义、类型是否正确等)依循的原则:语义规则中间代码:三元式,四元式,逆波兰记号,树形结构等。
是一种独立于具体硬件的记号系统。
例:将Z:=X + 0.618 * Y 翻译成四元式为(1) * 0.618 Y T1(2) + X T1 T2(3) := T2 _ Z4. 优化任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
依循的原则:程序的等价变换规则FOR K:=1 TO 100 DOBEGINM := I + 10 * K;N := J + 10 * K;END4.目标代码产生任务: 把中间代码变换成特定机器上的目标代码。
依赖于硬件系统结构和机器指令的含义目标代码三种形式:a)绝对指令代码: 可直接运行b)可重新定位指令代码: 需要连接装配c)汇编指令代码: 需要进行汇编第二章高级语言及其语法描述2.1.1语法词法规则:单词符号的形成规则。
a)单词符号是语言中具有独立意义的最基本结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
翻译模式示例:把带加号和减号的中缀表
达式翻译成相应的后缀表达式
E→TR
R→addop T {print(addop.lexeme)} R1 | T→num {print(num.val)}
E
例:9-5+2
T
R
9 {print(‘9’)} -
T {print(‘-’)} R
15
产生式 语义规则
S→B
B.ps :=10
翻译模式
B→B1B2
S.ht :=B.ht B1.ps :=B.ps
B2.ps :=B.ps
S → {B.ps:=10} B {S.ht:=B.ht}
B.ht := max(B1.ht, B2.ht)
B→B1 sub B2 B1.ps :=B.ps B2.ps :=shrink(B.ps)
编译原理
第六章 属性文法和语法制导翻译
1
第六章 属性文法和语法制导翻译
属性文法 基于属性文法的处理方法 S-属性文法的自下而上计算 L-属性文法和自顶向下翻译
2
第六章 属性文法和语法制导翻译
属性文法 基于属性文法的处理方法 S-属性文法的自下而上计算 L-属性文法和自顶向下翻译
3
3. 产生式左边非终结符的综合属性只有在它所引用 的所有属性都计算出来以后才能计算。计算这种 属性的动作通常可放在产生式右端的末尾
S → A1A2 A→a
{A1.in:=1; A2.in:=2} {print(A.in)}
12
排版软件 TeX、LaTeX
The quadratic formula is b b2 4ac 2a
语义规则:给出了属性计算的定义,没有属性 计算的次序等实现细节
翻译模式:给出了使用语义规则进行计算的次 序,这样就可把某些实现细节表示出来
在翻译模式中,和文法符号相关的属性和语义 规则(这里我们也称语义动作),用花括号{ } 括起来,插入到产生式右部的合适位置上
E→TR
R→addop T {print(addop.lexeme)} R1 |
一遍扫描的处理方法
一遍扫描的处理方法是在语法分析的同 时计算属性值
所采用的语法分析方法 属性的计算次序
L-属性文法适合于一遍扫描的自上而下 分析
S-属性文法适合于一遍扫描的自下而上 分析
4
6.4 L-属性文法和自顶向下翻译
通过深度优先的方法对语法树进行遍历, 计算属性文法的所有属性值
B → {B1.ps:=B.ps}
B→text
B.ht :=disp(B1.ht, B2.ht) B.ht :=text.h×B.ps
B1 { B2.ps:=B.ps }
1. 产生式右边符号的继
B2 {B.ht:=max(B1.ht,B2.ht)} 承属性必须在该符号以
B → {B1.ps:=B.ps}
The quadratic formula is ${-b\pm\sqrt{b^2-4ac} \over {2a}}$
For his major contributions to the analysis of algorithms and the design of programming languages, and in particular for his contributions to the "art of computer programming" through his well-known books in a continuous series by this title.
前的动作中计算出来
B1 sub {B2.ps:=shrink(B.ps)} B2 {B.ht:=disp(B1.ht,B2.ht)}
2. 一个动作不能引用该 动作右边符号综合属性
3. 产生式左边非终结符 的综合属性只有在它所
B → text {B.ht:=text.h×B.ps}
引用的所有属性都计算
LL(1):自上而下分析方法,深度优先建立 语法树
5
L-属性文法
一个属性文法称为L-属性文法,如果对于每 个产生式A→X1X2…Xn,其每个语义规则中 的每个属性或者是综合属性,或者是 Xj(1jn)的一个继承属性且这个继承属性仅 依赖于:
(1) 产生式中Xj左边符号X1,X2,…,Xj-1的属性 (2) A的继承属性
转换为
E → TR R → +T M R | -T N R | T → num { print (num.val) } M → { print (‘+’) } N → { print (‘-’) }
18
小结
L-属性文法 翻译模式
19
作业
P164 - 2,5,7
20
Donald Ervin Knuth
13
基于数学格式语言EQN
给定输入
En.val
E sub n .val
E sub n sub 1.val
E
.val
n
E
n .val
E
.val
n
识别输入并进行格式安放的L-属性文法
产生式
语义规则
S→B
B.ps :=10
S.ht :=B.ht
5 {print(‘5’)} + T {print(‘+’)} R
2 {print(‘2’)}
9
设计翻译模式的原则
设计翻译模式时,必须保证当某个动作引 用一个属性时它必须是有定义的
L-属性文法本身就能确保每个动作不会引用 尚未计算出来的属性
10
建立翻译模式
当只需要综合属性时:为每一个语义规则 建立一个包含赋值的动作,并把这个动作 放在相应的产生式右边的末尾
S-属性文法一定是L-属性文法
6
产生式 A→LM
A→QR
语义规则 L.i := g(A.i) M.i :=m(L.s) R.i := r(A.i) Q.i :=q(R.s) A.s :=f(Q.s)
7
产生式
6.4.1 E→翻TR译模式 R→addop T R1 | T→num
语义规则
print(addop.lexeme) print(num.val)
出来后才能计算。 16
建立翻译模式
把所有的语义动作都放在产生式的末尾
语义动作的执行时机统一
转换方法
加入新的产生式M→ 把嵌入在产生式中的每个语义动作用不同的标
记非终结符M代替,并把这个动作放在产生式 M→的末尾
17
翻译模式
E→TR R → +T { print (‘+’) } R
| -T { print (‘-’) } R | T → num { print (num.val) }
产生式
语义规则
T→T1*F
T.val:=T1.val×F.val
建立产生式和语义动作:
T→T1*F
{T.val:=T1.val×F.val}
11
建立翻译模式
如果既有综合属性又有继承属性,在建立翻译模 式时就必须保证:
1. 产生式右边的符号的继承属性必须在这个符号以 前的动作中计算出来
2. 一个动作不能引用这个动作右边的符号的综合属 性
B→B1B2 B→B1 sub B2 B→text
B1.ps :=B.ps B2.ps :=B.ps B.ht := max(B1.ht, B2.ht)
B1.ps :=B.ps B2.ps :=shrink(B.ps) B.ht :=disp(B1.ht, B2.ht) B.ht :=text.h×B.ps