编译原理第二章PPT
合集下载
编译原理第2章(1).ppt

例 “变量是一个算术表达式; 若E1和E2是算术表达式,则E1+E2,E1*E2和(El)也 是算术表达式。” 对于这个定义,若用产生式来描述,则可将它写成: E→i E→E+E E→E * E E→(E)
一个上下文无关文法G是一个四元式(VT,VN,S,ρ), 其中 VT是一个非空有限集,它的每个元素称为终结符号; VN是一个非空有限集,它的每个元素称为非终结符号, VT∩VN=φ S是一个非终结符号,称为开始符号; ρ是一个产生式集合(有限),每个产生式的形式是 P→α,其中,P∈VN, α∈(VT∪VN)* 。开始符号S 至少必须在某个产生式的左部出现一次。
2.2.3 数据类型与操作
一个数据类型通常包括以下三种要素: 用于区别这种类型数据对象的属性 这种类型的数据对象可以具有的值 可以作用于这种类型的数据对象的操作
2.2.3 数据类型与操作
一.初等数据类型 数值类型:整型、实型、复数、双精度, +, -, *, / 等 逻辑类型:布尔运算:∨,∧,┑ 字符类型:符号处理 指针类型
返回语句 return (E)
说明语句:定义各种不同数据类型的变量或运算,定 义名字的性质。
简单句和复合句
简单句:不包含其他语句成分的基本句 复合句:句中有句的语句
2.3 程序语言的语法描述
重点讨论上下文无关文法、语法分析树,以及文 法的二义性问题。最后还将对形式语言进行简单 概述。
字母表与符号
最左(最右)推导
所谓最左(最右)推导指:任何一步a => β都是对α中 的最左(最右)非终结符进行替换的。 最右推导也称为规范推导或规则推导。 (i*i+i)的最右推导: E =>(E) =>(E+E) =>(E+i) =>(E*E+i) =>(E*i+i) =>(i*i+i)
编译原理讲义第二章文法与语言.ppt

• 注意:在寻找一个句型的短语(或简单 短语)时,必须要求将这个短语规约为 相应的非终结符号后所得到的符号串仍 然是句型。
• 句柄:一个句型的最左简单短语称为该 句型的句柄。
• 定义句柄的原因:在自底向上识别一个 符号串时,总是规约这个句柄。
语言的定义(文法的语言)
• 文法的语言:一个文法G[Z]的语言,用 L(G[Z])表示,定义如下:
文法和语言的定义(推导)
• 直接推导:,,并且是文法中的一个重 写规则,那么我们说v可以直接推导到w, 或者w可以直接规约到v。记作 v => w。
• 例如: • 〈主语〉〈谓语〉〈状语〉 • =>〈名词〉〈谓语〉〈状语〉
文法和语言的定义(推导)
• 推导:对于符号串v和w,如果存在一个 直接推导序列u0=>u1=>…=>,并且u0,, 那么我们说v可以推导到w,或者w规约 到v。记作v =>+ w。
编译原理讲义 (章:文法与语言)
文法与语言
• 文法被用来精确而无歧义地描述语言的 句子的构成方式.
• 文法描述语言的时候不考虑语言的含义。
字母表
定义:字母表是有穷非空集合。
字母表包含了语言中所允许出现的一切符 号。
符号串
• 定义:符号串是由字母表中的符号所组 成的有穷序列。
• 一个语言的句子总是它的字母表的符号 串。这个符号串的组成必须是按照文法 规则组合而成的。
符号串集合
• 定义:若集合A中的一切元素都是同一个 字母表上的集合,那么A被称为该字母表 上的符号串集合。
• 在本课程中,语言被认为是句子的集合。 (外延定义?)所以,一个语言就是对 应于它的字母表上的一个符号串集合。
符号串集合的运算
• 句柄:一个句型的最左简单短语称为该 句型的句柄。
• 定义句柄的原因:在自底向上识别一个 符号串时,总是规约这个句柄。
语言的定义(文法的语言)
• 文法的语言:一个文法G[Z]的语言,用 L(G[Z])表示,定义如下:
文法和语言的定义(推导)
• 直接推导:,,并且是文法中的一个重 写规则,那么我们说v可以直接推导到w, 或者w可以直接规约到v。记作 v => w。
• 例如: • 〈主语〉〈谓语〉〈状语〉 • =>〈名词〉〈谓语〉〈状语〉
文法和语言的定义(推导)
• 推导:对于符号串v和w,如果存在一个 直接推导序列u0=>u1=>…=>,并且u0,, 那么我们说v可以推导到w,或者w规约 到v。记作v =>+ w。
编译原理讲义 (章:文法与语言)
文法与语言
• 文法被用来精确而无歧义地描述语言的 句子的构成方式.
• 文法描述语言的时候不考虑语言的含义。
字母表
定义:字母表是有穷非空集合。
字母表包含了语言中所允许出现的一切符 号。
符号串
• 定义:符号串是由字母表中的符号所组 成的有穷序列。
• 一个语言的句子总是它的字母表的符号 串。这个符号串的组成必须是按照文法 规则组合而成的。
符号串集合
• 定义:若集合A中的一切元素都是同一个 字母表上的集合,那么A被称为该字母表 上的符号串集合。
• 在本课程中,语言被认为是句子的集合。 (外延定义?)所以,一个语言就是对 应于它的字母表上的一个符号串集合。
符号串集合的运算
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 程序
所谓程序,是描述一定数据的处理过程,即包括描述 数据和对数据的运算两个功能。
也 是表达式;
(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 程序
所谓程序,是描述一定数据的处理过程,即包括描述 数据和对数据的运算两个功能。
编译原理课件第二章

递归子程序法
递归子程序法:对应每个非终结符语法单元,,编一个独 立的处理过程(或子程序)。语法分析从读入第一个单词 开始,由非终结符<程序>(即开始符)出发,沿语法描述 图箭头所指出的方向进行分析。当遇到非终结符时,则调 用相应的处理过程,从语法描述图看,也就进入了一个语 法单元,再沿当前所进入的语法单元所指箭头方向继续进 行分析。当遇到描述图中是终结符时,则判断当前读入的 单词是否与图中的终结符相匹配,若匹配,再读取下一个 单词继续分析。遇到分支点时,将当前的单词与分支点上 多个终结符逐个相比较,若都不匹配时可能是进入下一个 非终结符语法单位或是出错。
N ö í ³ ´
ò ¡ í ó ´ Ó ´ Î
á ÷ ½ Ê
PL/0编译程序语义分析的设计与实现
PL/0编译程序语法、语义分析的的核心程序是BLOCK过程 , 说明部分的分析与处理 表格管理 过程体(语句)的分析与处理
jmp jmp int lod lit opr sto opr int opr sto lod lit opr jpc cal lit lod opr opr opr opr sto jmp opr
0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8 2 3 3 10 2 4 0 5 16 3 3 0 9 24 2 2 4 4 14 15 16 3 11 0
3 5 7 9 10 12 13 14
£ ¹ <
= =
Ç = ²
>
11
=
Ç = ²
, + - ( ¡ ¡
PL/0编译程序语法语义分析
PL/0编译程序语法分析的设计与实现
编译原理ppt课件

.
<句子> => <主语><谓语> => <冠词><形容词><名词><谓语> => the <形容词><名词><谓语> => the big <名词> <谓语> => the big elephant <谓语> => the big elephant <动词><宾语> => the big elephant ate <宾语> => the big elephant ate <冠词><名词> => the big elephant ate the <名词> => the big elephant ate the peanut
.
3. 由规则推导句子:有了一组规则之后,可以按照一定的方式 用它们去推导或产生句子。
推导方法:从一个要识别的符号开始推导,即用相应规则的 右部来替代规则的左部,每次仅用一条规则去进行推导。
<句子> => <主语><谓语> <主语><谓语> => <代词><谓语>
…… …… 这种推导一直进行下去,直到所有带< >的符号都由终结符号替代为止。
第2章 形式语言概论 (主要介绍形式语言理论中的一些基本概念和基础知识,包括、语言、语
法树和分析方法等)
.
2.1 字母表和符号串 2.2 文法及其分类 2.3 语言和语法树 2.4 关于文法和语言的几点说明 2.5 分析方法简介 2.6 小结
<句子> => <主语><谓语> => <冠词><形容词><名词><谓语> => the <形容词><名词><谓语> => the big <名词> <谓语> => the big elephant <谓语> => the big elephant <动词><宾语> => the big elephant ate <宾语> => the big elephant ate <冠词><名词> => the big elephant ate the <名词> => the big elephant ate the peanut
.
3. 由规则推导句子:有了一组规则之后,可以按照一定的方式 用它们去推导或产生句子。
推导方法:从一个要识别的符号开始推导,即用相应规则的 右部来替代规则的左部,每次仅用一条规则去进行推导。
<句子> => <主语><谓语> <主语><谓语> => <代词><谓语>
…… …… 这种推导一直进行下去,直到所有带< >的符号都由终结符号替代为止。
第2章 形式语言概论 (主要介绍形式语言理论中的一些基本概念和基础知识,包括、语言、语
法树和分析方法等)
.
2.1 字母表和符号串 2.2 文法及其分类 2.3 语言和语法树 2.4 关于文法和语言的几点说明 2.5 分析方法简介 2.6 小结
编译原理第二章课件

例1:文法G: S aSb | ab
L(G)={anbn|n≥1}
28
2.2.2 文法的分类
3型文法(又称线性文法、正则文法、正 规文法)
➢ 如果对文法G中的任一产生式均限制为形如: AB 或 A
其中: A,B∈VN , ∈VT 则称文法G为3型文 法。 ➢ 上述形式的3型文法也称为右线性文法。 ➢ 如果对文法G中的任一产生式均限制为形如:
A0 = { } A1 = { a,b } A2 = AA ={ aa,ab,ba,bb } A3 = A2A ={ aaa,aab,aba,abb,baa,bab,bba,bbb }
……
An =An-1A = AAA……A
12
2.1 基本概念
10.符号串集合的正闭包
设A为符号串的集合,则称A+为符号串集A的 正闭包.具体定义如下:
文法
字符串集合
16
2.2 .1 文法的定义
2.2.1 文法(Grammar)的定义 文法的定义
一个文法G是一个四元组: G = ( VN, VT, S, P )
其中:
➢ VT (Terminal Vocabulary)是一个非空的有限集合,
它的每个元素称为终极符号或终极符,一般用小 写字母表示。 从语法分析的角度看,终极符号是 一个语言不可再分的基本符号。
可合并为一个,缩写为:
P 1 | 2 | … | n
其中,每个i 称为 P 的一个候选式,符号“|” 读作“或” 。
21
⑥一个文法的核心是产生式。 一般约定:
用< >括起来或 大写字母:非终结符 不用< >括起来或小写字母:终结符
22
例1
G =(VN,VT, S, P) 其中:VN={ S , A}
L(G)={anbn|n≥1}
28
2.2.2 文法的分类
3型文法(又称线性文法、正则文法、正 规文法)
➢ 如果对文法G中的任一产生式均限制为形如: AB 或 A
其中: A,B∈VN , ∈VT 则称文法G为3型文 法。 ➢ 上述形式的3型文法也称为右线性文法。 ➢ 如果对文法G中的任一产生式均限制为形如:
A0 = { } A1 = { a,b } A2 = AA ={ aa,ab,ba,bb } A3 = A2A ={ aaa,aab,aba,abb,baa,bab,bba,bbb }
……
An =An-1A = AAA……A
12
2.1 基本概念
10.符号串集合的正闭包
设A为符号串的集合,则称A+为符号串集A的 正闭包.具体定义如下:
文法
字符串集合
16
2.2 .1 文法的定义
2.2.1 文法(Grammar)的定义 文法的定义
一个文法G是一个四元组: G = ( VN, VT, S, P )
其中:
➢ VT (Terminal Vocabulary)是一个非空的有限集合,
它的每个元素称为终极符号或终极符,一般用小 写字母表示。 从语法分析的角度看,终极符号是 一个语言不可再分的基本符号。
可合并为一个,缩写为:
P 1 | 2 | … | n
其中,每个i 称为 P 的一个候选式,符号“|” 读作“或” 。
21
⑥一个文法的核心是产生式。 一般约定:
用< >括起来或 大写字母:非终结符 不用< >括起来或小写字母:终结符
22
例1
G =(VN,VT, S, P) 其中:VN={ S , A}
编译原理―第2章 前后文无关文法和语言课件

?一组终结符号不能被替换的符号单词符号?一组非终结符号能够被替换为终结符号或非终结符号语法单位?一个开始符号从这个符号开始替换最大语法单位程序?一组产生式替换规则把左边的字符串替换为右边的字符串222文法和语言的形式定义19?关键思路?从文法的开始符号出发?反复使用产生式对非终结符进行替换展开?直到整个字符串中不再包含非终结符?这时得到了这个文法的一个句子一个程序?这个过程称为推导222文法和语言的形式定义20?文法的形式定义?产生式规则?产生式是一个有序对通常写作或
符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的 方幂,其中i是非负整数。具体定义如下:
A0 ={ε} A1 =A, A2=AA Ak= AA......A(k个)
11
2.2.1 基本概念和术语
集合的闭包
闭包
集合Σ的闭包Σ*定义如下:Σ*=Σ0∪Σ1∪Σ2∪Σ3∪… 例:设有字母表Σ={0,1},则
从文法的开始符号出发 反复使用产生式,对非终结符进行替换(展开) 直到整个字符串中不再包含非终结符 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导
19
2.2.2 文法和语言的形式定义
文法的形式定义
产生式(规则)
产生式是一个有序对(α, β),通常写作α→β(或α::=β)
Σ*=Σ0∪Σ1∪Σ2∪…={ε,0,1,00,01,10,11,000,…},即Σ*表示Σ上所有有穷长 的串的集合。
正闭包
Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 +表示上的除ε外的所有用穷长串的集合。
Σ*= Σ0∪Σ+ Σ+=ΣΣ*=Σ*Σ
12
2.2.1 基本概念和术语
例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成, 设A={a,b,…,z},B={0,1,…,9},将所有标识符的集合用A和B的运算 来表示。
符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的 方幂,其中i是非负整数。具体定义如下:
A0 ={ε} A1 =A, A2=AA Ak= AA......A(k个)
11
2.2.1 基本概念和术语
集合的闭包
闭包
集合Σ的闭包Σ*定义如下:Σ*=Σ0∪Σ1∪Σ2∪Σ3∪… 例:设有字母表Σ={0,1},则
从文法的开始符号出发 反复使用产生式,对非终结符进行替换(展开) 直到整个字符串中不再包含非终结符 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导
19
2.2.2 文法和语言的形式定义
文法的形式定义
产生式(规则)
产生式是一个有序对(α, β),通常写作α→β(或α::=β)
Σ*=Σ0∪Σ1∪Σ2∪…={ε,0,1,00,01,10,11,000,…},即Σ*表示Σ上所有有穷长 的串的集合。
正闭包
Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 +表示上的除ε外的所有用穷长串的集合。
Σ*= Σ0∪Σ+ Σ+=ΣΣ*=Σ*Σ
12
2.2.1 基本概念和术语
例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成, 设A={a,b,…,z},B={0,1,…,9},将所有标识符的集合用A和B的运算 来表示。
《编译原理》第2章 编译基础-形式语言与有穷自动机

整理课件
句型、推导
G[E]: E→E+T|T T→T*F|F F→(E)|a
对于句子a+a*a 有不同 的推导
EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a
EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a
整理课件
例:奇偶测试器
0
0
1
q0
q1
∈
1
自动机:M=(Q,∑ ,δ ,q0,Z)
Q={ q0, q1}
∑ ={0,1}
q0=q0 Z={q1}
整理课件
映射函数:
δ( q0,0)= q0 0
0
δ( q0,1)= q1
1
δ( q1,0)= q1 q0
q1
δ( q1,1)= q0
1
例:000110001
整理课件
第四节 正规文法与有穷自动机 1、正规文法 产生的语言的推导 例:文法 G=(VN,VT,P,S) 其中: VN={A,B,C}
VT={a,b,c} S=A P:A →aB A →aA
B →bB B →bC C →cC C →c
整理课件
A=>aA=>aaA=>…..=>aa…aB =>aa…abB=>aa…abb…bC =>aa…abb…bcC=> aa…abb…bccC => aa…abb…bcc…c
D→ε
Aa→bD
自然语言属于上下文有关文法
整理课件
文法的类型
句型、推导
G[E]: E→E+T|T T→T*F|F F→(E)|a
对于句子a+a*a 有不同 的推导
EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a
EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a
整理课件
例:奇偶测试器
0
0
1
q0
q1
∈
1
自动机:M=(Q,∑ ,δ ,q0,Z)
Q={ q0, q1}
∑ ={0,1}
q0=q0 Z={q1}
整理课件
映射函数:
δ( q0,0)= q0 0
0
δ( q0,1)= q1
1
δ( q1,0)= q1 q0
q1
δ( q1,1)= q0
1
例:000110001
整理课件
第四节 正规文法与有穷自动机 1、正规文法 产生的语言的推导 例:文法 G=(VN,VT,P,S) 其中: VN={A,B,C}
VT={a,b,c} S=A P:A →aB A →aA
B →bB B →bC C →cC C →c
整理课件
A=>aA=>aaA=>…..=>aa…aB =>aa…abB=>aa…abb…bC =>aa…abb…bcC=> aa…abb…bccC => aa…abb…bcc…c
D→ε
Aa→bD
自然语言属于上下文有关文法
整理课件
文法的类型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上下文无关文法
是一个四元组,包括:
终结符集
文法所定义的语言的基本符号的集合 仅出现在产生式右部(体)
非终结符集
在某个产生式的左部出现过的文法符号
产生式集 开始符
两种说明方式:
• 明确指出 • 第1条产生式规则左部的文法符号
上下文无关文法(例)
list list + digit
使用分析树来描述推导过程
list list + digit list - digit + digit
digit - digit + digit
9 - digit + digit 9 - 5 + digit 9-5+2
list
list list
digit
9
+ digit
5
digit
二义性
对于一个文法,若有多棵分析树生成同一 个终结符号串,则此文法具有二义性。
一个具有二义性的文法
string
string string 9 string string 2 string 9
+
string 5
string 5
g
+ string
2
string string + string | string – string | 0 | 1 | …| 9
最左推导(Leftmost derivation) : 总是首先替 换最左边的非终结符 最右推导(rightmost derivation) : 总是首先替 换最右边的非终结符 最左(右)推导与分析树一一对应
可以通过说明对于某个串存在两个不同的最左推 导来证明文法二义 可以通过说明对于某个串存在两个不同的最右推 导来证明文法二义
有时可以基于优先级和结合性来构建无二义的 文法
四则运算存在两个优先级,所以可引入两个非终结 符expr和term来对应不同的运算层次 四则运算均为左结合,故规则中更为抽象的非终结 符应位于左边
expr expr + term | expr - term | term term term * factor | term / factor | factor
T T*F | F T F*T | F T T+F | F F id F id F id
作业1
2、指出下列错误可在编译的哪个阶段被发现 (1)关键字拼写错误 (2)缺少运算对象 (3)实参与形参的类型不一致 (4)所引用的变量没有定义 (5)数组下标越界 (6)本应为常数,但却在数中出现了非数字字符
一个文法的句子集合称为语言。
文法S 0S1 | 01生成什么语言?给出证明。
本文法对应的语言为{0m1m|m>0}。
证:对推导长度n进行归纳证明。 当n=1时,S可以推导出的句子为01,即0111。
设n不大于k时,得到的串为0n1n。则当n=k+1时,第 一步进行的推导应该是S0S1。而对于句型0S1中的 S进行k步推导,会得到句子为0k1k,故k+1步推导 得到的句子为0k+11k+1。
语法分析树
以图形方式展现推导过程 给定一个上下文无关文法,该文法的一棵语 法分析树是具有以下性质的树:
根节点是开始符
叶节点是终结符( token) 或 ε 内部节点(非叶结点)是非终结符 如果应用了规则A x1x2…xn, 则A是内部结点; x1 , x2 , … , xn是子结点
3、P2 练习1.1.1和练习1.1.2
list list - digit list digit digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
前三条规则可以简写成什么? 最后一条规则相当于多少条规则?
推导
从开始符出发,不断将某个非终结符替换为 该非终结符的某个产生式的右部。 推导的符号: 语言:从开始符出发,利用推导能得到的所 有终结符号串的集合。
2
-
综合例
考虑以下文法:S SS+ | SS* | a
1)试说明如何使用该文法生成串aa+a* S SS* SS+S* aS+S* aa+S* aa+a* 2)试为这个串构造一棵语法分析树 3)该文法生成的语言是什么?
后缀表达式
S S S a *
S a
S a
+
aa+a*的分析树
一个简单的 语法制导翻译器
待编译的代码
{
int i , j ; float a[100], v, x; while ( true ) { do{ i = i + 1 ; }while ( a[i] < v ); do{ j = j - 1 ; }while ( a[j] > v ); if ( i >= j ) break; x=a[i]; a[i]=a[j]; a[j] = x; }
文法: S → AB A → aaA A→ ε B→ b
S A a a A ε 不同的推导过 程对应一棵相 同的分析树! B b
要求推导出: aab
最左推导:
S ⇒ AB ⇒ aaAB ⇒ aaB ⇒ aab 最右推导: S ⇒ AB ⇒ Ab ⇒ aaAb ⇒ aab
证明以下文法二义: (第二种证法) S aSbS | bSaS | ε 证:对于串abab存在两个不同的最左推导:
综合(1)(2)可知,对于任意的n>0,n步推导所得 的句子为0n1n,本文法对应的语言为{0m1m|m>0}。
作业1
1、先分别用以下文法推导出id+id+id*id,并画出 推导过程对应的分析树;最后比较三个文法生成 的语言有什么不同。
文法1:E E+T | T 文法2:E T+E | T 文法3:E E*T | T
设A={a,b,c},则A*表示 {ε,a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,…}
语言
推导长度:执行一步推导的次数
一步推导
+ 大于等于1步的推导 * 大于等于0步的推导
对于上下文无关语言G[S]:
* ,则为文法G的句型 如果S + 如果S W (WT*), 则W为文法G的句子。
factor digit | (expr)
digit 0 | 1 | 2 |…| 9
证明以下文法二义。
S aSbS | bSaS | ε
证:对于串abab存在两棵不同的分析树:
S a S ε b ε S ε a S ε S b S
b S a S
a
S b
ε
S
ε
故本文法二义
最左推导与最右推导
}
简化的中间代码 1: i=i+1 2: t1=a[i] 3: if t1<v goto 1 4: j=j-1 5: t2=a[j]; 6: if t2>v goto 4 7: ifFalse i>=j goto 9 8: goto 14 9: x=a[i] 10: t3=a[j] 11: a[i]=t3 12: a[j]=x 13: goto 1 14:
编译器前端的模型
源 词法分 程 析器 序 记号 语法分 析器 语法树 中间代码 中间 生成器 代码
符号表
产生式
也称重写规则或规则。 通常写作: U ::= u 或 U u
其中: U是一个符号,称为左部或头 u是有穷符号串,称为右部或体
例: <sentence> <subject> <verb> <sentence> <subject> <verb> <complement>
SaSbSabSaSbSabaSbSababSabab
SaSbSabSabaSbSababSabab 故本文法二义
串
符号的有穷序列
串的表示:
a2表示aa a2b2表示aabb 闭包:a*表示{ε,a,aa,aaa,aaaa,….}
正闭包:a+表示{a,aa,aaa,aaaa,…}
上下文无关文法生成的语言称为上下文无关语言
推导(例)
list list + digit list - digit + digit
digit - digit + digit 9 - digit + digit 9 - 5 + digit 9 - 5 + 2
list list + digit list list - digit list digit digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9