760 likes | 996 Views
第 2 章 高级语言 及其文法. 本章主要内容. 2.1 语言概述 2.2 基本定义 2.3 文法 (Grammar) 的定义 2.4 CFG 的语法 ( 分析 ) 树 (Parse Tree) 2.5 文法的分类 2.6 文法的构造. 2.1 语言概述. 什么是语言 自然语言 (Natural Language) 是人与人的通讯工具 语义 (Semantics): 环境、背景知识、语气、二义性 —— 难以形式化 计算机语言 (Computer Language) 计算机系统间、人机间通讯工具
E N D
本章主要内容 • 2.1 语言概述 • 2.2 基本定义 • 2.3 文法(Grammar)的定义 • 2.4 CFG的语法(分析)树(Parse Tree) • 2.5 文法的分类 • 2.6 文法的构造
2.1 语言概述 • 什么是语言 • 自然语言(Natural Language) • 是人与人的通讯工具 • 语义(Semantics):环境、背景知识、语气、二义性——难以形式化 • 计算机语言(Computer Language) • 计算机系统间、人机间通讯工具 • 严格的语法(Grammar)、语义(Semantics) ——易于形式化:严格 • 语言是用来交换信息的工具——功能性描述
2.1语言概述 • 语言的描述方法——现状 • 自然语言:自然、方便-非形式化 • 数学语言(符号):严格、准确-形式化 • 形式化描述 • 高度的抽象,严格的理论基础和方便的计算机表示。
2.1 语言概述 • 语言——形式化的内容提取 • 单词(Token):满足一定规则字符(Character)串 • 句子(Sentence):满足一定规则单词序列 • 语言(Language):满足一定条件的句子集合 • 语言是字和组合字的规则——结构性描述 • 例:一译开天第课今始编节上 • 今天开始上第一节编译课
2.1 语言概述 • 程序设计语言——形式化的内容提取 • 程序设计语言(Programming Language):组成程序的所有语句的集合 • 程序(Program):满足语法规则的语句序列 • 语句(Sentence) :满足语法规则的单词序列 • 单词(Token) :满足词法规则的字符串 • 例 • 变量=表达式 • if 条件 then 语句 • while条件 do 语句 • call 过程名(参数表)
2.1 语言概述 • 描述形式——文法 • 语法——语句 • 语句的组成规则 • 描述方法:BNF范式、语法(描述)图 • 词法——单词 • 单词的组成规则 • 描述方法:BNF范式、正规式
2.2 基本定义 • 字母表(Alphabet)是一个非空有穷集合,字母表中的元素称为该字母表的一个字母(Letter),也叫字符(Character)。 • 例 以下是不同的字母表: ⑴ {a,b,c,d} ⑵ { a,b,c,……,z} ⑶ {0,1}
2.2 基本定义 • 字母表上符号串(String)的定义 (1) ε是∑上的一个符号串,叫做空串。 (2) 若x是∑上的符号串,而a是∑的元素, 则xa是∑上的符号串。 (3) y是∑上的符号串,当且仅当它由(1)和(2)导出。 • 由字母表中的符号所组成的的任何有穷序列被称之为该字母表上的符号串,也称作“字”(Word)。
2.2 基本定义 • 定义 1 设∑1、∑2是两个字母表,∑1与∑2的乘积(Product)∑1∑2={ab|a∈∑1,b∈∑2} • 例:∑1={0,1}, ∑2={a,b}, ∑1∑2 ={0a,0b,1a,1b} • 定义 2设∑是一个字母表,∑的n次幂(Power)递归地定义为: • ⑴ ∑0={ε} • ⑵ ∑n=∑n-1∑ n≥1 • 例: ∑13 ={000,001,010,011,100,101,110,111}
2.2 基本定义 • 定义 3 设∑是一个字母表,∑的正闭包(Positive Closure): • ∑+=∑∪∑2∪∑3∪∑4∪…… • ∑的克林闭包(Kleene Closure): • ∑*=∑0∪∑+ • =∑0∪∑∪∑2∪∑3∪……
2.2 基本定义 • 例 {0,1}+={0,1,00,01,11,000,001,010,011,100,……} {a,b,c,d}+={a,b,c,d,aa,ab,ac,ad,ba,bb,bc,bd,……,aaa,aab,aac,aad,aba,abb,abc……}
2.2 基本定义 • 例 {0,1}*={ε,0,1,00,01,11,000,001,010,011,100,…} {a,b,c,d}*={ε,a,b,c,d,aa,ab,ac,ad,ba,bb,bc,bd,…,aaa,aab,aac,aad,aba,abb,abc,…}
2.2 基本定义 • 定义 5 设∑是一个字母表,L ∑*,L称为字母表∑上的一个语言(Language),x∈L,x叫做L的一个句子。 • 例: 字母表{0,1}上的语言 {0,1} {00,11} {0,1,00,11} {0,1,00,11,01,10} {00,11}* {01,10}*
2.2 基本定义 设s是符号串:01290273 前缀:移走s的尾部的零个或多于零个符号 后缀:删去s的头部的零个或多于零个符号 子串: 从s中删去一个前缀和一个后缀 子序列: 从s中删去零个或多于零个符号(这些符号不要求是连续的) 长度:是该符号串中的符号的数目。例如|aab|=3,|ε|=0。
2.2 基本定义 符号串的连接和幂 1.连接:设x和y是符号串,它们的连接xy是把y的符号写在x的符号之后得到的符号串。例如,x=ba,y=nana,xy=banana. 2.幂:x0= ; x1=x; x2=xx; ……;xn=xn-1x; 例如, x=ba, x1= ba, x2=baba, x3=bababa,…...
2.3 文法的定义 如何实现语言结构的形式化描述?
〈句子〉 〈谓语〉 〈主语〉 〈冠词〉 〈形容词〉 〈名词〉 〈动词〉 〈直接宾语〉 助动词 动原 冠词 名词 The gray wolf will eat the goat 考虑一个句子——文法要素的提取 分析:The gray wolf will eat the goat
产生句子的规则——从产生语言的角度 句子→主语谓语 主语→冠词形容词名词 谓语→ 动词直接宾语 动词→助动词动词原形 直接宾语→ 冠词名词 冠词→the 形容词→gray 助动词→will 动词原形→eat 名词→wolf 名词→goat
句子的语法组成 ——终结符号集,非终结符号集,语法规则,开始符号 终结符号集VT = {the,gray, wolf,will, eat, goat} 非终结符号集VN = { 句子,主语,谓语,冠词,形容词,名词 , 动词 ,直接宾语 ,助动词 ,动词原形} 语法规则集P = {句子 → 主语谓语,……} 开始符号S = 句子
文法G 的形式定义 文法G为一个四元组: G = (VT,VN,P,S) • VT:终结符(Terminal)集 • VN:非终结符(Variable)集,VT∩VN=Φ • 语法范畴——某个语言结构 • S:开始符号(Start Symbol),S∈VN • 至少在产生式左侧出现一次
文法G 的形式定义 • P:产生式(Product)集合 α→β,被称为产生式(定义式),读作:α定义为β。其中α∈(VT∪VN)+,且α中至少有VN中元素的一个出现。β∈(VT∪VN)*。α称为产生式α→β的左部(Left Part),β称为产生式α→β的右部(Right Part)。
句子的派生(推导)___根据规则 句子主语谓语 冠词形容词名词谓语 the 形容词名词谓语 the gray名词谓语 the gray wolf 谓语 the gray wolf 动词直接宾语 the gray wolf 助动词动词原形直接宾语 the gray wolf will 动词原形直接宾语 the gray wolf will eat 直接宾语 the gray wolf will eat 冠词名词 the gray wolf will eat the 名词 the gray wolf will eat the goat
还可以“得出”其他的句子 句子the gray wolf will eat the goat the gray wolf will eat the wolf the gray goat will eat the wolf the gray goat will eat the gray 符合语法且符合语义的句子仅是: the gray wolf will eat the goat
例2-1 算术表达式的文法 • 考虑简单算术表达式组成的语言 • 递归定义——中缀表示 • 标识符(id)(常数、变量)是表达式; • 表达式加一个表达式是表达式; • 表达式减一个表达式是表达式; • 表达式乘一个表达式是表达式; • 表达式除一个表达式是表达式; • 表达式加上括号后是表达式。
上次课主要内容 • 编译程序实现技术 • 自展 • 自动生成:lex、Yacc • 语言 • 信息交流的工具 • 字和组合字的规则的统一体 • 字母表上的语言 • 字母表 • ∑+、∑* 、 a∈∑ ,x∈∑*、 L ∑*、 x∈L • 前缀、后缀、子串、串长、串的连接、串的幂
上次课主要内容 • 文法 • 通过刻画语言的结构描述语言 • 用有穷描述无穷 • G = (VT,VN,P,S) • 表达式的递归定义
E→id E→E + E E→E - E E→E *E E→E / E E→(E) 例2-1 算术表达式的文法 考虑用式子表示这个定义 标识符(id) 是表达式 表达式加一个表达式是表达式 表达式减一个表达式是表达式 表达式乘一个表达式是表达式 表达式除一个表达式是表达式 表达式加上括号后是表达式
例2-1 算术表达式的文法 • P: 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 ) | id
产生式的简写 • 对一组有相同左部的产生式 α→β1,α→β2…,α→βn 可以简单地记为: α→β1|β2|…|βn 读作:α定义为或者β1,或者β2,…,或者βn。并且称它们为α产生式。β1,β2,…,βn称为候选式(Candidate)。
1 E→E+E • 2 E→E*E • 3 E→(E) • 4 E→id • 5 E→E-E • 6 E→E/E 产生式规定的一些变换 • E由第一个候选式可以变成E+E • E+E中的第一个E由第二个候选式可以变成E*E,从而E+E变成E*E+E • 根据第4个候选式,E*E+E中的E都可以变成id: • E*E+E 变成id*E+E • id*E+E变成id*E+id • id*E+id变成id*id+id • 也就是说,根据第4个候选式, E*E+E经3步变换变成id*id+id
1 E→E+E • 2 E→E*E • 3 E→(E) • 4 E→id • 5 E→E-E • 6 E→E/E 文法使用举例 E E + E (1) id + E (4) id + E * E (2) id + id * E (4) id + id * id (4) E 5 id + id * id
直接推导与归约 • 根据产生式对符号串进行变换的过程 • A→γ是文法G的一个产生式, • 且α、β∈(VT∪VN)*, • 称αAβ的直接推导/派生(Derive)出αγβ,也称 αγβ直接归约(Reduce)为αAβ。 • 记为 αAβαγβ • 例: • id + Eid + E * E
(多步)推导 • α0α1α2 …αn • 记为 α0n αn(恰用n步) • α0+ αn(至少一步) • α0* αn(若干步:零步或多步)
1 E→E+E • 2 E→E*E • 3 E→(E) • 4 E→id 推导/归约举例 E E + E (1) 串中含有变量 • id + E (4) 串中含有变量 • id + E * E (2) 串中含有变量 • id + id * E (4) 串中含有变量 • id + id * id (4) 串中没有变量 • 到此串中已经没有(语法)变量了,不能再推了——得到句子
句型与句子 • E 5 id + id * id • 定义:如果S * x,且x∈VT* ,则称x是G产生的一个句子(Sentence) • E E + E E + E * E • E 4 id + id * E • 定义:如果S*α,α∈(VT∪VN)*则称α是G产生的一个句型(Sentential Form)
文法G产生的语言 定义: L(G)={x|S*x and x∈VT*} • 文法 E→E+E|E*E|(E)|id可以派生出多少个句子? • 文法G的作用——语言的有穷描述 • 以有限的规则描述无限的语言现象 • 有限:产生式集合、终结符集合、非终结符集合 • 无限:可以导出无穷多个句子 • (注:L也可是有穷)
id+id*id的不同推导E→E+E|E*E|(E)|id • EE*E • E+E*E • E+id*E • id+id*E • id+id*id • EE+E • id+E • id+E*E • id+id*E • id+id*id • EE+E • E+E*E • E+E*id • E+id*id • id+id*id • 施于最左变量 • 左句型(left-~) • (最右归约) • E5id+id*id • 施于最右变量 • 右句型/规范句型 (canonical ~) • (最左/规范归约) • E +id+id*id • 不做限制 • 句型(sentential Form) • (归约) • E *id+id*id
最左推导与最右推导 • 最左推导(Left-most Derivation) • 每次推导都施加在句型的最左边的语法变量上。——与最右归约对应 • 最右推导(Right-most Derivation) • 每次推导都施加在句型的最右边的语法变量上。——与最左归约(规范规约)对应的规范(Canonical)句型
短语(Phrase) • 自然语言中什么叫短语? • 如果S*αAβ & A+γ,则称γ是句型αγβ的相对于变量A的短语 • 如果S*αAβ & Aγ,则称γ是句型αγβ的相对于变量A的直接短语 • 最左直接短语叫做句柄(Handle)
例:(直接)短语 • (E+T)+T • (T+T)+T • (F+T)+T • (a+T)+T • (a+T*F)+T • (a+F*F)+T • (a+b*F)+T • (a+b*c)+T • (a+b*c)+F • (a+b*c)+d EE+T T+T F+T (E)+T (E+T)+T • E→E+T|T • T→T* F|F • F→( E )| id
句柄(Handle):最左直接短语 • E→E+T|T • T→T* F|F • F→( E )| id • EE+T • T+T • F+T • (E)+T • (E+T)+T • (E+T)+T • (T+T)+T • (F+T)+T • (a+T)+T • (a+T*F)+T • (a+F*F)+T • (a+b*F)+T • (a+b*c)+T • (a+b*c)+F • (a+b*c)+d
例2-2 标识符的文法1 • S →L|LT T → L|N|TL|TN L → a|b|c|d letter N → 0|1|2|3|4|5 digit • ?正整数的文法;正实数的文法
2.4 文法的分类(Chomsky体系) • 语言结构的复杂程度(形式语言) • 涉及文法的复杂程度、分析方法的选择 • 如果G满足文法定义的要求,则G是0型文法(短语结构文法PSG: Phrase Structure Grammar )。 • L(G)为PSL。
上下文有关文法(CSG) • 若产生式集合中所有|α|≤|β|, 除 S→ε外,则G是1型文法 • 即:上下文有关文法(CSG——Context Sensitive Grammar) • L(G)为1型/上下文有关/敏感语言(CSL)
上下文无关文法(CFG) • 若 α∈VN,β∈(VN∪VT)*,则 G 是2型文法 • 即:上下文无关文法(CFG: Context Free Grammar) • L(G)为2型/上下文无关语言(CFL) • 例:程序设计语言的多数语法特征
例2-3 标识符的文法2 • S →L|LT T → L|N|TL|TN L → a|b|c|d N → 0|1|2|3|4|5 • S → a|b|c|d • S → aT|bT|cT|dT • T → a|b|c|d|0|1|2|3|4|5 • T → aT|bT|cT|dT|0T • T →1T|2T|3T|4T|5T
正规文法(RG) • 设A、B∈VN,a∈VT或为 • 右线性(Right Linear)文法:A→aB或A→a • 左线性(Left Linear)文法:A→Ba或A→a • 都是3型文法(正规文法 Regular Grammar -RG) • L(G)为3型/正规集/正则集/正则语言(RL) • 例:程序设计语言的多数词法特性 • 左、右线性文法不可混用
例 非CFL的文法 L={anbncn|n>0}的文法 SaBC|aSBC CBBC aBab bBbb bCbc • “可以证明”不存在CFG G ,使L(G)=L
非CFL结构 在我们使用的程序语言中,有些语言结构并不是总能用上下文无关文法描述的。 例 L1={wcw|w∈{a,b}+}。例,aabcaab就是L1的一个句子。这个语言是检查程序中标识符的声明应先于引用的抽象。 例 L2={anbmcndm|n,m≥0},它是检查过程声明的形参个数和过程引用的参数个数是否一致问题的抽象。