编译原理第3章 文法和语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动词原形 → eat 名词 → wolf 名词 → goat
只写产生式? 约定:第一个产生式的左部为开始符号
编译原理
2014年5月28日
例3-1 算术表达式的文法
• 考虑简单算术表达式组成的语言 • 递归定义——中缀表示
– 标识符(id)(常数、变量)是表达式;
– 表达式加表达式是表达式; – 表达式减表达式是表达式; – 表达式乘表达式是表达式; – 表达式除表达式是表达式; – 表达式加上括号后是表达式
编译原理
2014年5月28日
3.1.2
字母表和符号串
不对 符号就是字符,对吗? 如={if,else,for,while} 字母表:符号的非空有限集 例:={0,1}
C语言的字母表 A={a,b,…,0,1,…,9, +,-,×,_/, ( , ), =… if, else,for...} 符号:字母表中的元素 例: 0,1 符号串:由字母表中的符号组成的任何有穷序列 例:0,1, 01, 10, 011,.. 空符号串:无任何符号的符号串,用ε 表示 符号串的长度:含有的符号个数|x|=m
编译原理
2014年5月28日
符号串的运算
符号串的连接运算 符号串x和y的连接:是把y的符号写在x的符号之后 得到的符号串xy 例如x=00,y=11,则xy=0011 对于任意一个符号串s,有εs= sε=s
编译原理
2014年5月28日
符号串的幂运算 符号串自身连接n次得到的符号串sn 定义为 ss…ss ,包括n个s,称为符号串的幂运算 s0=ε,s1=s,s2=ss,…… 设s=01,则 s0=ε s1=01 s2=0101 ……
编译原理
2014年5月28日
产生式的简写
α→β1,α→β2,…,α→βn 简单地记为:α→β1|β2|…|βn
让描述看起来 更简洁一点
•对一组有相同左部的产生式
读作:α定义为β1,或者β2,…,或者βn, 并且称它们为α产生式。β1,β2,…,βn称 为候选式(Candidate) •文法如何实现对语言的刻画?产生式很关键!
编译原理
2014年5月28日
3.3
文法和语言的形式定义
文法是对语言结构的定义与描述。(或称为“语法”)。
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” | <标识符> | <整数> | <实数>
定义3.1 文法的形式定义
V=VN ∪VT 称为文法的字母表
文法G[S]=(VN,VT,P,S) VN :非终结符号集 VT :终结符号集 P: 产生式或规则的集合 S: 开始符号(识别符号) S∈ VN ,S至少要在 一条规则中作为左部出现
补: 规则P的定义 α :: β 或αβ α∈V+且至少有一个非终结符,而β∈(VN ∪ VT)*
eat
2014年5月28日
the
goat
Start Symbol
产生句子的规则——从产生语言的角度
句子 → 主语 谓语 冠词 → the 形容词 → gray 助动词 → will 动词原形 → eat 名词 → wolf 名词 → goat
主语 → 冠词 形容词 名词
编译原理
2014年5月28日
没有这个看着“舒服”
句子 → 主语 谓语
主语 → 冠词 形容词 名词 谓语 → 动词 直接宾语 动词 → 助动词 动词原形 直接宾语 → 冠词 名词 冠词 → the 形容词 → gray
助动词 → will
变量=表达式 if 条件 then 语句 while条件 do 语句 call 过程名(参数表)
• 例
– – – –
编译原理
2014年5月28日
• 描述形式——文法 – 语法——语句 • 语句的组成规则 • 描述方法:BNF范式、语法(描述)图 – 词法——单词 • 单词的组成规则 • 描述方法:BNF范式、正规式
编译原理
2014年5月28日
语言是由句子组成的集合,是由一组符号所构成的集合
字母表上的一个语言是上的一些符号串的集合 字母表上的每个语言是*的一个子集 例如:字母表 Σ ={a,b} ,Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…}
集合{ab,aabb,aaabbb,…,anbn,…} 或表示为{w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言 集合{a,aa,aaa,…} 或表示为{w|w∈Σ*且w=an,n≥1} 为 字母表上的一个语言
谓语 → 动词 直接宾语 动词 → 助动词 动词原形 直接宾语 → 冠词 名词
编译原理
Variable2014年5月28日 Terminal
句子的语法组成
——终结符号集,非终结符号集,语法规则,开始符号
终结符号集VT = {the, gray, wolf, will, eat, goat}
编译原理
2014年5月28日
• 语言的描述方法——现状
– 自然语言:自然、方便-非形式化
– 数学语言(符号):严格、准确-形式化
– 机器要掌握规则:形式化描述
• 高度的抽象 • 严格的理论基础 • 方便的计算机表示
编译原理
2014年5月28日
• 语言——形式化的内容提取
– – – – 字符(Character) :语言的基本字符 单词(Token):满足一定规则字符串 句子(Sentence):满足一定规则单词序列 语言(Language):满足一定规则的句子集合
第 3章
文法和语言
教学目标
1. 本章是编译原理课程的理论基础,要求掌握形 式语言的基本术语和概念。 2. 掌握文法和语言的定义,文法的二义性与递归 性的判断方法及句型的分析方法。 3. 熟练使用文法定义程序设计语言的单词和语法 成分。 4. 对形式语言的理论有一个初步认识。
关键:让系统知道“组 成规则”并按照规则分 析!
编译原理
2014年5月28日
符号串集合的闭Fra Baidu bibliotek运算
设A是符号串集合,定义 A+= A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… 称为集合A的正闭包。 A*= A0 ∪A+ 称为集合A的闭包。 例:A={x,y} A+=? {x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……}
• 语言是字和组合字的规则——结构性描述
– 例:今次课是三日上编译第 – 今日是上第三次编译课
编译原理
2014年5月28日
• 程序设计语言 (Programming Language)——形式化 的内容提取
– – – – 程序设计语言为组成程序的所有语句的集合 程序(Program):满足语法规则的语句序列 语句(Sentence) :满足语法规则的单词序列 单词(Token) :满足词法规则的字符串
如何实现语言结构的形
编译原理
式化描述?
2014年5月28日
考虑一个句子——文法要素的提取
分析:The gray wolf will eat the goat
〈句子〉 〈主语〉
〈冠词〉 〈形容词〉 〈名词〉
〈谓语〉
〈动词〉 〈直接宾语〉
〈动原〉 〈冠词〉 〈名词〉
〈助动〉
The
gray
编译原理
wolf will
编译原理
2014年5月28日
符号串的前缀(头)和后缀(尾): 从符号串s的尾(头)部删去若干个(包括0个)符号之后所 余下的部分称为s的前(后)缀
ε,0,01及011都是符号串011的前缀
ε,1,11及011都是符号串011的后缀 在头和尾中除去符号串本身之外的部分称为固有头和固有尾 符号串集合:若集合A中的一切元素都是某字母表上的符号 串,则称A为该字母表上的符号串集合。 例:={a,b,c} A={ a,aa,ac}
* 2
*
{ } ......
* 2 3
例:Σ ={a,b} Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…} Σ +={a,b,aa,ab,ba,bb,aaa,aab,…}
编译原理
2014年5月28日
为什么对符号、符号串、符号串集合以及它们的运算感兴趣? 若A为某语言的字母表 A={a,b,…,0,1,…,9, +,-,×,_/, ( , ), =… if, else,for...} B为单词集 B ={if, else,for,……,<标识符>,<常量>,……} 则B A* 。 语言的句子是定义在B上的符号串。 若令C为句子集合,则C B * , 程序 C
编译原理
2014年5月28日
符号串集合的乘积 设A、B为符号串集合,则A和B的乘积定义为: AB={ xy |x∈A,y∈B} 例如,A={a,b},B={c,d} 则AB= {ac,ad,bc,bd}
编译原理
2014年5月28日
符号串集合的幂运算 有符号串集合A,定义A0 ={ε}, A1=A, A2=AA, A3=AAA,…… An=An-1A=AAn-1 ,n>0 例如,A={0,1},则 A0= {ε} A1= {0,1} A2= {00,01,10,11} A3= {000,001,010,011,100,101,110,111}
A1 A2 A3
{ε, x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……} A*= ? 0 1 2 3
A A A A
编译原理
2014年5月28日
Σ的闭包* 表示上的一切符号串(包括ε)组成的集合 Σ的正闭包+ 表示上的除ε外的所有符号串组成的集合
{ } ......
编译原理
2014年5月28日
<句子>的语法组成
• G =( {the,gray, wolf,will, eat, goat}, { 句 子,主语,谓语,冠词,形容词, 名词 , 动词 ,直接宾语 ,助动词 , 动词原形 }, {句子 → 主语谓语 , 主语 → 冠词 形容词 名词, 谓语 → 动词 直接宾语, 动词 → 助动词 动词原形,直接宾语 → 冠词 名词, 冠词 → the,形容词 → gray ,助动词 → will ,动词原形 → eat ,名词 → wolf, 名词 → goat} , 句子) • 看起来有点乱!
编译原理
2014年5月28日
教学内容
• 3.1 字母表和符号串的基本概念
• 3.2 文法和语言的形式定义 • 3.3 句型的分析 • 3.4 文法和语言的分类
编译原理
2014年5月28日
3.1 语言概述
• 什么是语言 – 自然语言(Natural Language) • 是人与人之间的通讯工具 • 语义(Semantics):环境、背景知识、语气、二 义性——难以形式化 – 计算机语言(Computer Language) • 计算机系统间、人机间通讯工具 • 严格的语法(Grammar)、语义(Semantics) — —易于形式化:严格 – 语言是用来交换信息的工具——功能性描述
非终结符号集VN = { 句子,主语,谓语,
冠词,形容词,名词 , 动词 ,直接宾语 ,助动词 ,动词原形 }
语法规则集P = {句子 → 主语谓语 ,……}
开始符号S = 句子
编译原理
文法:以有穷的集合刻 画无穷集合的工具。
2014年5月28日
编译原理
2014年5月28日
例3-1 算术表达式的文法
考虑用式子表示这个定义 标识符(id) 是表达式
E→id E→E + E E→E - E E→E *E E→E / E E→(E)
表达式加表达式是表达式
表达式减表达式是表达式 表达式乘表达式是表达式
表达式除表达式是表达式 表达式加上括号后是表达式
编译原理
2014年5月28日
例3-1 算术表达式的文法 • 按照约定:只写产生式
E→E + E E→E - E E→E * E E→E/ E E→( E ) E→id • G =({id,+,-,*,/,(,)},{E},P,E) – – – – – –
• 简写E → E+E | E*E | E-E | E/E | (E) | id
只写产生式? 约定:第一个产生式的左部为开始符号
编译原理
2014年5月28日
例3-1 算术表达式的文法
• 考虑简单算术表达式组成的语言 • 递归定义——中缀表示
– 标识符(id)(常数、变量)是表达式;
– 表达式加表达式是表达式; – 表达式减表达式是表达式; – 表达式乘表达式是表达式; – 表达式除表达式是表达式; – 表达式加上括号后是表达式
编译原理
2014年5月28日
3.1.2
字母表和符号串
不对 符号就是字符,对吗? 如={if,else,for,while} 字母表:符号的非空有限集 例:={0,1}
C语言的字母表 A={a,b,…,0,1,…,9, +,-,×,_/, ( , ), =… if, else,for...} 符号:字母表中的元素 例: 0,1 符号串:由字母表中的符号组成的任何有穷序列 例:0,1, 01, 10, 011,.. 空符号串:无任何符号的符号串,用ε 表示 符号串的长度:含有的符号个数|x|=m
编译原理
2014年5月28日
符号串的运算
符号串的连接运算 符号串x和y的连接:是把y的符号写在x的符号之后 得到的符号串xy 例如x=00,y=11,则xy=0011 对于任意一个符号串s,有εs= sε=s
编译原理
2014年5月28日
符号串的幂运算 符号串自身连接n次得到的符号串sn 定义为 ss…ss ,包括n个s,称为符号串的幂运算 s0=ε,s1=s,s2=ss,…… 设s=01,则 s0=ε s1=01 s2=0101 ……
编译原理
2014年5月28日
产生式的简写
α→β1,α→β2,…,α→βn 简单地记为:α→β1|β2|…|βn
让描述看起来 更简洁一点
•对一组有相同左部的产生式
读作:α定义为β1,或者β2,…,或者βn, 并且称它们为α产生式。β1,β2,…,βn称 为候选式(Candidate) •文法如何实现对语言的刻画?产生式很关键!
编译原理
2014年5月28日
3.3
文法和语言的形式定义
文法是对语言结构的定义与描述。(或称为“语法”)。
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” | <标识符> | <整数> | <实数>
定义3.1 文法的形式定义
V=VN ∪VT 称为文法的字母表
文法G[S]=(VN,VT,P,S) VN :非终结符号集 VT :终结符号集 P: 产生式或规则的集合 S: 开始符号(识别符号) S∈ VN ,S至少要在 一条规则中作为左部出现
补: 规则P的定义 α :: β 或αβ α∈V+且至少有一个非终结符,而β∈(VN ∪ VT)*
eat
2014年5月28日
the
goat
Start Symbol
产生句子的规则——从产生语言的角度
句子 → 主语 谓语 冠词 → the 形容词 → gray 助动词 → will 动词原形 → eat 名词 → wolf 名词 → goat
主语 → 冠词 形容词 名词
编译原理
2014年5月28日
没有这个看着“舒服”
句子 → 主语 谓语
主语 → 冠词 形容词 名词 谓语 → 动词 直接宾语 动词 → 助动词 动词原形 直接宾语 → 冠词 名词 冠词 → the 形容词 → gray
助动词 → will
变量=表达式 if 条件 then 语句 while条件 do 语句 call 过程名(参数表)
• 例
– – – –
编译原理
2014年5月28日
• 描述形式——文法 – 语法——语句 • 语句的组成规则 • 描述方法:BNF范式、语法(描述)图 – 词法——单词 • 单词的组成规则 • 描述方法:BNF范式、正规式
编译原理
2014年5月28日
语言是由句子组成的集合,是由一组符号所构成的集合
字母表上的一个语言是上的一些符号串的集合 字母表上的每个语言是*的一个子集 例如:字母表 Σ ={a,b} ,Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…}
集合{ab,aabb,aaabbb,…,anbn,…} 或表示为{w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言 集合{a,aa,aaa,…} 或表示为{w|w∈Σ*且w=an,n≥1} 为 字母表上的一个语言
谓语 → 动词 直接宾语 动词 → 助动词 动词原形 直接宾语 → 冠词 名词
编译原理
Variable2014年5月28日 Terminal
句子的语法组成
——终结符号集,非终结符号集,语法规则,开始符号
终结符号集VT = {the, gray, wolf, will, eat, goat}
编译原理
2014年5月28日
• 语言的描述方法——现状
– 自然语言:自然、方便-非形式化
– 数学语言(符号):严格、准确-形式化
– 机器要掌握规则:形式化描述
• 高度的抽象 • 严格的理论基础 • 方便的计算机表示
编译原理
2014年5月28日
• 语言——形式化的内容提取
– – – – 字符(Character) :语言的基本字符 单词(Token):满足一定规则字符串 句子(Sentence):满足一定规则单词序列 语言(Language):满足一定规则的句子集合
第 3章
文法和语言
教学目标
1. 本章是编译原理课程的理论基础,要求掌握形 式语言的基本术语和概念。 2. 掌握文法和语言的定义,文法的二义性与递归 性的判断方法及句型的分析方法。 3. 熟练使用文法定义程序设计语言的单词和语法 成分。 4. 对形式语言的理论有一个初步认识。
关键:让系统知道“组 成规则”并按照规则分 析!
编译原理
2014年5月28日
符号串集合的闭Fra Baidu bibliotek运算
设A是符号串集合,定义 A+= A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… 称为集合A的正闭包。 A*= A0 ∪A+ 称为集合A的闭包。 例:A={x,y} A+=? {x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……}
• 语言是字和组合字的规则——结构性描述
– 例:今次课是三日上编译第 – 今日是上第三次编译课
编译原理
2014年5月28日
• 程序设计语言 (Programming Language)——形式化 的内容提取
– – – – 程序设计语言为组成程序的所有语句的集合 程序(Program):满足语法规则的语句序列 语句(Sentence) :满足语法规则的单词序列 单词(Token) :满足词法规则的字符串
如何实现语言结构的形
编译原理
式化描述?
2014年5月28日
考虑一个句子——文法要素的提取
分析:The gray wolf will eat the goat
〈句子〉 〈主语〉
〈冠词〉 〈形容词〉 〈名词〉
〈谓语〉
〈动词〉 〈直接宾语〉
〈动原〉 〈冠词〉 〈名词〉
〈助动〉
The
gray
编译原理
wolf will
编译原理
2014年5月28日
符号串的前缀(头)和后缀(尾): 从符号串s的尾(头)部删去若干个(包括0个)符号之后所 余下的部分称为s的前(后)缀
ε,0,01及011都是符号串011的前缀
ε,1,11及011都是符号串011的后缀 在头和尾中除去符号串本身之外的部分称为固有头和固有尾 符号串集合:若集合A中的一切元素都是某字母表上的符号 串,则称A为该字母表上的符号串集合。 例:={a,b,c} A={ a,aa,ac}
* 2
*
{ } ......
* 2 3
例:Σ ={a,b} Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…} Σ +={a,b,aa,ab,ba,bb,aaa,aab,…}
编译原理
2014年5月28日
为什么对符号、符号串、符号串集合以及它们的运算感兴趣? 若A为某语言的字母表 A={a,b,…,0,1,…,9, +,-,×,_/, ( , ), =… if, else,for...} B为单词集 B ={if, else,for,……,<标识符>,<常量>,……} 则B A* 。 语言的句子是定义在B上的符号串。 若令C为句子集合,则C B * , 程序 C
编译原理
2014年5月28日
符号串集合的乘积 设A、B为符号串集合,则A和B的乘积定义为: AB={ xy |x∈A,y∈B} 例如,A={a,b},B={c,d} 则AB= {ac,ad,bc,bd}
编译原理
2014年5月28日
符号串集合的幂运算 有符号串集合A,定义A0 ={ε}, A1=A, A2=AA, A3=AAA,…… An=An-1A=AAn-1 ,n>0 例如,A={0,1},则 A0= {ε} A1= {0,1} A2= {00,01,10,11} A3= {000,001,010,011,100,101,110,111}
A1 A2 A3
{ε, x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……} A*= ? 0 1 2 3
A A A A
编译原理
2014年5月28日
Σ的闭包* 表示上的一切符号串(包括ε)组成的集合 Σ的正闭包+ 表示上的除ε外的所有符号串组成的集合
{ } ......
编译原理
2014年5月28日
<句子>的语法组成
• G =( {the,gray, wolf,will, eat, goat}, { 句 子,主语,谓语,冠词,形容词, 名词 , 动词 ,直接宾语 ,助动词 , 动词原形 }, {句子 → 主语谓语 , 主语 → 冠词 形容词 名词, 谓语 → 动词 直接宾语, 动词 → 助动词 动词原形,直接宾语 → 冠词 名词, 冠词 → the,形容词 → gray ,助动词 → will ,动词原形 → eat ,名词 → wolf, 名词 → goat} , 句子) • 看起来有点乱!
编译原理
2014年5月28日
教学内容
• 3.1 字母表和符号串的基本概念
• 3.2 文法和语言的形式定义 • 3.3 句型的分析 • 3.4 文法和语言的分类
编译原理
2014年5月28日
3.1 语言概述
• 什么是语言 – 自然语言(Natural Language) • 是人与人之间的通讯工具 • 语义(Semantics):环境、背景知识、语气、二 义性——难以形式化 – 计算机语言(Computer Language) • 计算机系统间、人机间通讯工具 • 严格的语法(Grammar)、语义(Semantics) — —易于形式化:严格 – 语言是用来交换信息的工具——功能性描述
非终结符号集VN = { 句子,主语,谓语,
冠词,形容词,名词 , 动词 ,直接宾语 ,助动词 ,动词原形 }
语法规则集P = {句子 → 主语谓语 ,……}
开始符号S = 句子
编译原理
文法:以有穷的集合刻 画无穷集合的工具。
2014年5月28日
编译原理
2014年5月28日
例3-1 算术表达式的文法
考虑用式子表示这个定义 标识符(id) 是表达式
E→id E→E + E E→E - E E→E *E E→E / E E→(E)
表达式加表达式是表达式
表达式减表达式是表达式 表达式乘表达式是表达式
表达式除表达式是表达式 表达式加上括号后是表达式
编译原理
2014年5月28日
例3-1 算术表达式的文法 • 按照约定:只写产生式
E→E + E E→E - E E→E * E E→E/ E E→( E ) E→id • G =({id,+,-,*,/,(,)},{E},P,E) – – – – – –
• 简写E → E+E | E*E | E-E | E/E | (E) | id