第2章一个简单的语法制导翻译器

合集下载

第3,4课 一个简单的语法制导翻译器

第3,4课 一个简单的语法制导翻译器

弟节点上的属性值决定,则该属性为继承属性
第二章 一个简单的语法制导翻译器

后缀表达式(postfix notation):E
如何E是一个变量或常量,则E的后缀是本身 如果E是一个形如E1 op E2的表达式,op是二目运算
符,那么E的后缀表示是:E1‘ E2‘ op,这里E1‘ 和E2‘分 别是E1和E2的后缀表示 如果E是一个形如(E1)的表达式,则E的后缀表示就 是E1的后缀表示
每个产生式和一组语义
expr term term 0 term 1 … term 9
规则相关联
第二章 一个简单的语法制导翻译器

语法制导翻译
属性 综合属性
如果某个属性在语法分析树节点N上的值由N的子节点和N
本身的属性值确定,则该属性为综合属性
继承属性
如果某个属性由语法分析树中该节点本身、父节点以及兄
第3,4次课 一个简单的语法制导翻译器
2.3~2.5
中缀表达式转后缀表达式

本次课主要内容都是基于如何将中缀表达 式转换为后缀表达式 9 – 5 + 2 -> 95-2+
2.3语法制导翻译的定义
第二章 一个简单的语法制导翻译器

语法制导翻译:对语法树进行语义分析
例如:将中缀表达式转化成为后缀 9 - 5 + 2 95–2+
term.t = 5 5
term.t = 9
9
产生式
expr expr1 + term expr expr1 - term expr term term 0 term 1 … term 9
语义规则
expr.t = expr1.t || term.t || „+‟ expr.t = expr1.t || term.t || „-‟ expr.t = term.t term.t = „0‟ term.t = „1‟ … term.t = „9‟

语法制导翻译【共41张PPT】

语法制导翻译【共41张PPT】

一个属性文法称为L-属性文法,如果对于每个产生式
int T_val, R_i, R_s; int E_val;
AX1X2Xn,其中每条语义规则中的每个属性或者
是综合属性,或者是X (1jn)的一个继承属性且这 (3) E→(E(1))
val[ntop]= val[top–1]
使用标记非终结符M和N改写为
2. 函数过程A的代码(指用符号形式表示的数据和程序)
要根据当前的输入符号来决定使用哪一个产生式。
3. 与每一个产生式有关的代码,从左到右根椐产生式右部是
终结符(单词符号)、非终结符号还是语义动作,分别处 理:
保存下来,以便以后语义子程序引用这些信息。
原LR分析器的分析栈也加以扩充,存放三类信息:分析
状态、文法符号及文法符号对应的语义值。
top
sk
Xk
Xk.val
... ... ...
s1
X1
X1.val
s0
#
_
状态 文法符号 语义值
扩充后的LR分析栈
例6-3 考虑下面的语法制导定义
产生式
语义规则
9–5+2的带语义动作的分析树
设计翻译模式(根据语法制导定义)
语法制导定义是L-属性文法 保证语义动作不会引用还没有计算的属性值。
只需要综合属性的情况
为每一个语义规则建立一个包含赋值的动作,并把这个 动作放在相应的产生式右边的末尾。
例如:T T(1)*F T.val:=T(1).val*F.val
产生式 语义规则 A LM L.i:=l(A.i)
M.i:=m(L.s) A.s:=f(M.s) A QR R.i:=r(A.i) Q.i:=q(R.s) A.s:=f(Q.s)

2019年郑州大学编译原理第2章.ppt

2019年郑州大学编译原理第2章.ppt
(3)若E为表达式,是一元运算符,则 E (或E )
也 是表达式;
(4) 若E为表达式,则 ( E )也是表达式。
二、语句
1、赋值句 2、控制语句
无条件转移语句 条件语句 循环语句 过程(或函数)调用语句 返回语句
3、说明句 4、简单句和复合句
§2.3 程序语言的语法描述
本节介绍高级语言语法结构的形式化描述问题
例题2.5
构造一个文法G4,使得
L(G4)={ ambn | m>n≧0 } 正解:文法G4: SAB Aa|aA BaBb|ε
上下文无关文法定义 归纳起来,一个上下文无关文法包括四个组成 部分: 一组终结符号 如:me ,book,gave 等 一组非终结符号 如:<主语>,<谓语> 等 一个开始符号 如: <句子> 一组产生式 如: <间接宾语> → <代词> <直接宾语> → <冠词> <名词>
上下文无关文法定义
形式上说,一个上下文无关文法G是一个四元式: G=(VT,VN,S,),其中: VT是一个非空有限集,它的每个元素为终结符号; VN是一个非空有限集,它的每个元素为非终结符号 且VT∩VN= Φ S 是一个非终结符号,称为开始符号; 是产生式有限集合,形如 A→α * 其中:A∈ VN, α∈(VT U VN) 。 注: 开始符号S是一个特殊的非终结符号,它至少 必须在某个产生式的左部出现一次。
语义规则 是指这样的一组规则,使用它可以定义一
个程序的意义。

描述语义规则的工具:
基于属性文法的语法制导下的翻译方法
2.1.3 程序
所谓程序,是描述一定数据的处理过程,即包括描述 数据和对数据的运算两个功能。

语义分析和语法制导翻译-编译原理-06-(二)

语义分析和语法制导翻译-编译原理-06-(二)
E.code := E1.code || gen(E.place':=0-'E1.place)
E.place:= E1.place; E.code:= E1.code
E.place:= id.place; E.code:= ' ' E.place:= num.val;E.code:= ' '

注释: || 表示代码序列的连接
T.type := „real‟ L1.in := L.in addtype( id.entry, L.in )
L → id
entry addtype
addtype( id.entry, L.in ) 单词 id 的属性(符号表入口)
在符号表中为变量填加类型信息
属性文法的作用

抽象描述语义处理的要求
习题
1. 下列文法是一个二进制数的文法。试根据 该文法,编写一个语法制导定义,描述由 S 生成的二进制数的数值计算。 S -> L . L L -> L B | B B -> 0 | 1 2. 参照下列表达式文法编写语法制导定义, 描述表达式的类型计算。要求在不同精度的 数的计算中,结果取精度高的类型。 E -> E + T | T T -> n.n | n
分析树和属性计算
S-属性定义:
仅包括综合属性
对于所有A
→ X1 X2 …Xn, 的属性
A的属性计算仅用X1…Xn
如:算术表达式求值的属性文法
L-属性定义:
其属性可用深度优先的顺序从左
至右计算
对于所有 Xi
A→X1 X2 … Xn
属性计算仅使用A X1 X2 … Xi-1 的属性

编译课后题完整版

编译课后题完整版

第一章1.选择题(1)若源程序是高级语言编写的程序,目标程序是_C__,则称它为编译程序。

A汇编语言程序或高级语言程序B高级语言程序或机器语言程序C汇编语言程序或机器语言程序D连接程序或运行程序(2)编译程序是对_A__程序进行翻译。

A高级语言B机器语言C自然语言D汇编语言(3)如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:_AC___A编译阶段B汇编阶段C运行阶段D置初值阶段(4)编译程序的工作过程一般可划分为下列5个基本阶段:词法分析、_CB___、代码优化和目标代码生成。

A出错处理B语义分析及中间代码生成C语法分析D表格管理(5)编译过程中,词法分析阶段的任务是_B__A识别表达式B识别语言单词C识别语句D识别程序2.判断题(1)编译程序是一种常用的应用软件。

(×)/*系统软件(2)C语言的编译程序可以用C语言来编写。

(√)(3)编译方式与解释方式的根本区别在于是否生成目标代码。

(√)(4)编译程序与具体的语言无关。

(×)(5)编译程序与具体的机器有关。

(√)(6)对编译程序而言,代码优化是不可缺少的一部分(×)(7)对编译程序而言,中间代码生成是不可缺少的一部分。

(×)(8)编译程序生成的目标程序一定是可执行的程序。

(×)(9)含有优化部分的编译程序的执行效率高。

(√)第二章1.选择题(1)一般程序设计语言的描述都涉及______三个方面A.语法B.语用C.语义D.基本符号的确定(2)为了使编译程序能对程序设计语言进行正确的翻译,必须采用____方法定义程序设计语言。

A.非形式化B.自然语言描述问题B.形式化 D.自然语言和符号体系相结合(3)设x是符号串,符号串的幂运算x°=____A.1B.xC.εD.ø(5)字母表中的元素可可以是_____A.字母B.字母和数字C.数字D.字母、数字和其他符号(6)文法用来描述语言的语法结构,由如下4个部分组成:_ABC_和文法开始符号。

第5课 词法分析、符号表、中间代码生成

第5课 词法分析、符号表、中间代码生成

符号表
符号表的每个条目中包含与一个标识符相关的
信息,比如它的字符串、类型、存储位置等。 为每个作用域设置一个符号表
block
‘{’ decls stmts ‘}’
1) { int x1 ; int y1 ; 2) { int w2 ; bool y2 ; int z2 ; 3) …w2…; …x1…; …y2…; …z2…; 4) } 5) …w0…; …x1…; …y1…; 6) }
第二章 一个简单的语法制导翻译器

符号表
符号表的每个条目中包含与一个标识符相关的
信息,比如它的字符串、类型、存储位置等。 为每个作用域设置一个符号表
block
‘{’ decls stmts ‘}’
B1 : x y B2 : w y z int bool int
B0 : w

1) { int x1 ; int y1 ; 2) { int w2 ; bool y2 ; int z2 ; 3) …w2…; …x1…; …y2…; …z2…; 4) } 5) …w0…; …x1…; …y1…; 6) }
public void put(String s, Symbol sym) { table.put(s, sym); }
public Symbol get(String s) { for(Env e = this; e != null; e = e.prev ) { Symbol found = (Symbol)(e.table.get(s)); if( found != null ) return found; } return null; } }
第二章 一个简单的语法制导翻译器

符号表

语法制导翻译和中间代码生成【共50张PPT】

语法制导翻译和中间代码生成【共50张PPT】

例 完成类型检查的属性文法
1) E→T1+T2{T1.t=int AND T2.t=int}
2) E→T1 or T2 {T1.t=bool AND T2.t=bool}
3) T→num
{T.t :=int}
4) T→true {T.t :=bool}
5) T→false
{T.t :=bool}
6.1 属性文法(续)
四元式(续)
四元式的优点:
四元式比三元式更便于优化 优化要求改变运算顺序或删除某些运算,引起编号的变化。 三元式通过编号引用中间结果,编号的变化引起麻烦;四元 式通过临时变量引用中间结果,编号变化无影响。
四元式对生成目标代码有利
四元式表示很类似于三地址指令,很容易转换成机器代 码。
四元式(续)
3) E→T
{ E.val :=T.val }
4) T→T1*F { T.val :=T1.val * F.val }
5) T→F
{ T.val :=F.val }
6) F→(E) { F.val :=E.val }
7) F→digit { F.val :=digit.lexval }
E.val、T.val、F.val都是综合属性
每个使用性标识符是否都有声明? 运算符的分量类型是否相容? 赋值语句的左右部的类型是否相容?
➢ 赋值语句的翻译目标:
在赋值语句右部表达式产生的四元式序列后加一 条赋值四元式
简单赋值语句到四元式的翻译
考虑如下文法描述的简单赋值句的翻译: A→i:=E E→E+E|E*E|-E|(E)|i (6.1)
:=
a
+
叶子结点代表运算量, 非叶子结点代表运算符

编译原理(龙书)习题答案(chap2-3)

编译原理(龙书)习题答案(chap2-3)

状态
a
b
-A{0}
B
A
B{0,1}
B
C
C{0,2}
B
D
+D{0,3}
E
D
+E{0,1,3} E
F
+F{0,2,3} E
D
DFA的状态图:
1) a(a | b) * a
以a开头和结尾且至少包含两个字符的a,b字符串的集合
2) (( | a)b*)*
由a和b组成的任意字符串的集合
3) (a | b)*a(a | b)(a | b)
倒数第三个字符为a的任意的a,b字符串的集合
4) a*ba*ba*ba*
包含3个b的a,b字符串的集合
5)(aa | bb)*((ab | ba)(aa | bb)*(ab | ba)(aa | bb)*)*
由相同数目的a和b组成的字符串的集合,或者空串
5) S a | S S | S S | S| ( S )
以a为变量,包括+,连接,*和括号四种运算的表 达式的集合
2.2.3 练习2.2.2中哪些文法具有二义性? 3) 4) 5)具有二义性。 以5)为例进行说明: 给定字符串 a+a+a ,对应着两棵分析树:
DFA的转换表:
状态
ห้องสมุดไป่ตู้
a
b
+A{0,1,2,3,5,6,7,9,10,11} B
C
+B{1,2,3,4,5,6,7,9,10,11} B
C
+C{1,2,3,5,6,7,8,9,10,11} B
C
DFA的状态图:
4) (a | b)*abb(a | b)*
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9 + 5 * 2 是什么含义? (9 + 2) * 5 或9 + (5 * 2) ? 不同的运算符号有不同的优先级,如9+5*2 表示
9+(5*2),所以*的优先级比+高。
() 优先级 * /
+-
19
通过适当改写文法规则,可以描述不同的结合律和优先 级:
factor digit | ( expr )
term
term * factor
|
term / factor
|
factor
expr
expr + term
|
expr – term
|
term
factor(因子):不能被任何运算符分开的表达式
term(项):可以被高优先级的运算符*和/分开,但不能被低优先级运算符分
开的表达式
expr(表达式):expression
语法分析树 Parse Tree
4
巴科斯-诺尔范式 Form
Bakus-Naur范式(BNF)
约翰·巴科斯
5
BNF例子
非终结符
标识符的定义:
identifier ::= <letter> { letter | digit }
letter ::= “A” | “B” | “C” | ... | “Z” | “a” | “b” | ... | “z”
第二章 一个简单的语法制导翻译器
1
本章主要内容
中缀表达式 expr op expr 后缀表达式 expr expr op
用C语言开发一个把中缀表达式转换为后缀表达式 的翻译程序,展示基本的编译技术
9*5+x
95*x+
主要描述编译器的前端 词法分析、语法分析和语义分析
通过本章对编译的过程有所了解
如果非终结符A有产生式 A XYZ,则A的一棵分析 树为:
A
X YZ
13
句法分析树Parse Tree
分析树具有如下性质:
根结点是开始符号Start Symbol 叶子结点是终结符或 内部结点是一个非终结符 Non-Terminal
If A x1x2…xn, Then A 是一个非终结符; x1x2…xn 是A 的孩子,是终结符或非终结符
2
2.1 概述
程序设计语言由语法(syntax)和语义(semantics)两个方面 定义。
程序设计语言的语法通常用上下文无关文法来表示。 if_stmt if (expr) stmt else stmt A bDc D eFgH | e
中文:S->主语 谓语 宾语 日语:S->主语 宾语 谓词 阿拉伯语:S->谓词 主语 宾语
digit 0 | 1 | … | 9
a=b=c right
letter = right
a
letter = right
b
letter
c
right letter = right | letter
letter a | b | c | …| z
18
2.2.4 算符优先级 Operator Precedence
S Subj Verb Obj 奶牛 吃 草
每个文法符号有属性的集合
每个产生式有语义计算规则的集合
语法制导翻译方案
描述翻译过程
一个例子:将中缀表达式翻译成后缀表达式
expr expr1 + term
翻译expr1; 匹配+;
翻译term;
22
处理加法表达式;
2.3.1 后缀表示Postfix Notation
(6) 竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。
6
(7) ::= 是“被定义为”的意思。
语法图 Syntax Graph
尼古拉斯·沃斯
7
提出了“结构化程序设计”的概念,算法+数据结构=程序,设计了Pascal语言。
上下文无关文法 Context-Free Grammar, CFG
25
注释分析树
综合属性:属性值是由子节点的属性确定的 通过遍历分析树可以求得结果 计算顺序:深度优先遍历是一种常用的方法
expr.t =95-2+
expr.t =95expr.t =9 term.t =5
term.t =9
term.t =2
左结合例子:a=3-4-5; a=3-4+5; 右结合例子:a=b=c+1; a=**p;q=&*p;
17
Left vs. Right
9-5+2 list
list + digit
list - digit
2
5
digit
9
list list + digit | list - digit | digit
stmts stmts stmt
|
注意:“;”的设置
假设改为:if (expr )then stmt; 又假设stmt为赋值语句, 那么 语句就会多出现一个分号, 21 例如:if( a>0 ) b++; ;
2.3 语法制导翻译 Syntax-Directed Translation
语法是掌握语义的钥匙 语法制导定义
Examples: ( 9 – 5 ) + 2 9 5 – 2 + 9–(5+2) 952+-
23
2.3.2 语法制导定义 Syntax-Directed Definition
每个文法符号有属性的集合(a Set of Attributes) 每个产生式有语义计算规则的集合(a Set of
上述文法定义的是由加号和减号分隔的数字 序列构成的列表。
10
例2.2 数字序列9 - 5 + 2的推导(derive)
list list + digit list - digit + digit
digit - digit + digit 9 - digit + digit 9 - 5 + digit 9-5+2
终结符号:+ - 0 1 2 3 4 5 6 7 8 9 Vt
9
非终结符号 :list digit Vn
开始符号:list
“”:推导,左部是非终结符,右部是(VtVn)*
“|” 表示“或者”
9
例2.1 简单的算术表达式
list list + digit | list – digit | digit digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
expr1的解释
Semantic Rule expr.t := expr1.t || term.t || ‘+’ expr.t := expr1.t || term.t || ’-’ expr.t := term.t term.t := ‘0’ term.t := ‘1’ …. term.t := ‘9’
9 - digit + digit
9 - 5 + digit
digit
9-5+2
9
list
list
digit
digit
-
5+
token
2
15
list list + digit | list – digit | digit
2.2.2 二义性 Ambiguity 9-5+2
文法Grammar:
语义的描述则比语法的描述难得多,采用非形式化的自然语 言描述
牛吃草。 语义错误:汽车吃草。
3
如何描述语法
上下文无关文法Context Free Grammar (CFG) Bakus-Naur范式(BNF) 语法图Syntax Graph
IP NP-SBJ VP NP-SBJ DNP NP NN 贷款|本息 | 回收|中国
上下文无关文法CFG是一个四元组 (Vt, Vn, S, P),其中:
1. Vt 是一个非空有穷集合,称作终结符号集合
Terminal Symbols
2. VNnon是-te一rm个in非als空,有且穷Vt集V合n ,= 称。作非终结符号集合 3. S Vn ,称作开始符号Start Symbol 。 4. P是一个非空有穷集合,称为产生式集合Production
P1 : list list + digit P2 : list list - digit P3 : list digit P4 : digit 9 P4 : digit 5 P4 : digit 2
从开始符号推导得到的所有的终结符号串的集合称
为该文法定义的语言(language)。
Rules ,每条产生式形为A,其中AVn, (VtVn)*。
8
例2.1 简单的算术表达式
9-5+2
list list + digit list list - digit
list list + digit
list digit
list - digit 2
digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 digit 5
digit
::= “0” | “1” | “2” | ... | “9”
整数的定义:
integer ::= [symbol] unsigned
终结符
unsigned ::= digit { digit }
相关文档
最新文档