第3章清华大学编译原理PPT
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
语言概述
语言是由句子组成的集合,是由一组符号所构成 的集合。 汉语--所有符合汉语语法的句子的全体 英语--所有符合英语语法的句子的全体 程序设计语言--所有该语言的程序的全体 每个句子构成的规律 研究语言 每个句子的含义 每个句子和使用者的关系
研究程序设计语言 每个程序构成的规律 每个程序的含义 每个程序和使用者的关系 语言研究的三个方面 语法 Syntax 语义 Semantics 语用 Pragmatics
如果不考虑语义和语用,即只从语法这一侧 面来看语言,这种意义下的语言称作形式语 言。形式语言抽象地定义为一个数学系统。 “形式”是指这样的事实:语言的所有规则 只以什麽符号串能出现的方式来陈述。形式 语言理论是对符号串集合的表示法、结构及 其特性的研究。是程序设计语言语法分析研 究的基础。
试以Pascal语言赋值语句为例,说明什么是一个语法成分 的语法、语义、语用。
文法的直观概念和语言概述
当我们表述一种语言时,无非是说明这种语言的 句子,如果语言只含有有穷多个句子,则只需 列出句子的有穷集就行了,但对于含有无穷句 子的语言来讲,存在着如何给出它的有穷表示 的问题。 以自然语言为例,人们无法列出全部句子,但是 人们可以给出一些规则,用这些规则来说明(或 者定义)句子的组成结构,比如汉语句子可以是 由主语后随谓语而成,构成谓语的是动词和直接 宾语,我们采用第2章所介绍的EBNF来表示这 种句子的构成规则:
{ } ......
* 2
* { } * 2 3 ......
例:Σ ={a,b} Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…} Σ +={a,b,aa,ab,ba,bb,aaa,aab,…}
有关定义和记号
“我是大学生”。是汉语的一个句子 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉
有了一组规则以后,按照如下方式用它们导出句子:开始去找 ∷=左端的带有〈句子〉的规则并把它由∷=右端的符号串代 替,这个动作表示成:
文法即是生成方式描述语言的:语言中的 每个句子可以用严格定义的规则来构造. 下面给出文法的定义.进而在文法的定义 的基础上,给出推导的概念,句型、句子和 语言的定义.
定义
文法G定义为四元组(VN,VT,P,S )其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; VN,VT和P是非空有 穷集。 S称作识别符号或开始符号,它是一个非终结符, 至少要在一条产生式中作为左部出现。 VN和VT不含公共的元素,即VN ∩ VT = φ 用V表示VN ∪ VT ,称为文法G的字母表或字汇表 规则,也称重写规则、产生式或生成式,是形如 α→β或α∷=β的(α,β)有序对,其中α是字母表V 的正闭包V+中的一个符号,β是V*中的一个符号。 α称为规则的左部,β称作规则的右部。
对于每个符号串s, s和ε 两者都是符号串s的前 缀,后缀和子串。 符号串s的真前缀,真后缀,真子串:任何非空 符号串 x,相应地,是s的前缀,后缀或子串, 并且 s x
符号串的运算
符号串的长度:符号串中符号的个数.符号串s的长度 记为|s|。 ε 的长度为0 连接:符号串x、y的连接,是把y的符号写在x的符号 之后得到的符号串xy 如 x=ab,y=cd 则 xy=abcd 有ε a = aε 方幂:符号串自身连接n次得到的符号串 an 定义为 aa…aa n个a a1=a, a2=aa则a0=ε
有关定义和记号—回顾 符号串s的头(前缀):移走符号串s尾部的零 个或多于零个符号得到的符号串. 如: b是符号串banana的一个前缀. 符号串s的尾(后缀):删去符号串s头部的零 个或多于零个符号得到的符号串. 如:nana是符号串banana的一个后缀. 符号串s的子串:从s中删去一个前缀和一个后 缀得到的符号串. 如:ana是 符号串banana的一个子串.
符号串集合:若集合A中所有元素都是某字母 表上的符号串,则称A为字母表上的符号 串集合。 两个符号串集合A和B的乘积定义为 AB =xy|xA且yB 若 集合A=ab,cde B = 0,1 则 AB =ab1,ab0,cde0,cde1 使用 * 表示上的一切符号串(包括ε )组 成的集合。Σ *称为Σ 的闭包。 上的除ε 外的所有符号串组成的集合记为 + 。 Σ +称为Σ 的正闭包。
文法和语言的形式定义 如何来描述一种语言?
如果语言是有穷的(只含有有穷多个句子),可以 将句子逐一列出来表示 如果语言是无穷的,找出语言的有穷表示。语言的 有穷表示有两个途经: 生成方式 (文法):语言中的每个句子可以用严 格定义的规则来构造。 识别方式(自动机):用一个过程,当输入的一任 意串属于语言时,该过程经有限次计算后就会停止 并回答“是”,若不属于,要麽能停止并回答“不 是”,(要麽永远继续下去。)
语言是由句子组成的集合,是由一组符号所构成的集合。换言
之,字母表上的一个语言是上的一些符号串的集合 (字母表 上的每个语言是*的一个子集)。 例如:字母表Σ ={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} 为字母表上的一个语 言。 ε 是一个语言。 即 是一个语言。
Define a grammar
A grammar G is defined as a 4-tuple (VN,VT,P,S )
VN is a set of nonterminals VT is a set of terminals P is a set of productions,each production consists of a left side,an arrow(or ‘::=‘),and a right side S is a designation of one of the nonterminals as the start symbol V =VN ∪ VT is the alphabet of G
给出语言上的有关运算 设L是(上的)一个语言,M是(上的)一个语 言, 语言L和M的并,交,差,补是一个语言。 语言L和M的并为 LM,是一个语言: {w|w is in L or is in M} 如: L1 ={a,b,…y,z} M1 ={1,2…8,9 } L1M1={a,b,… y,z,1,2…8,9 } 语言L和M的连接是一个语言,记为 LM LM={st |s∈L且 t∈M} 如: L1M1 ={a1,b1,…y1,z1,a2,b2…a9…z9} 有L ε = ε L=L。 L的n次连接Ln= LL...L
英语句子
sentence –> <subject> <verb-phrase> <object> subject –> This | Computers | I verb-phrase –> <adverb> <verb> | <verb> adverb –> never verb –> is | run | am | tell object –> the <noun> | a <noun> | <noun> noun –> university | world | cheese | lies This is a university. Computers run the world. I am the cheese. I never tell lies.
语法 -- 表示构成语言句子的各个记号之间 的组合规律 语义 -- 表示各个记号的特定含义。(各个 记号和记号所表示的对象之间的关系) 语用 --表示在各个记号所出现的行为中, 它们的来源、使用和影响。
每种语言具有两个可识别的特性,即语言的形式 和该形式相关联的意义。 语言的实例若在语法上是正确的,其相关联的意 义可以从两个观点来看,其一是该句子的创立 者所想要表示的意义,另一是接收者所检验到 的意义。这两个意义并非总是一样的,前者称 为语言的语义,后者是其语用意义。幽默、双 关语和谜语就是利用这两方面意义间的差异。
第3章
本章目的
文法和语言
为语言的语法描述寻求工具
工具要对程序设计语言给出精确无二义的语法描 述。(严谨、简洁、易读)
形式工具--形式语言抽象地定义为一个数学 系统。“形式”是指这样的事实:语言的 所有规则只以什麽符号串能出现的方式来 陈述
本章知识点(内容)
引言和预备知识
文法和语言的形式定义 文法的类型 上下文无关文法及其语法树 上下文无关文法的句型分析 有关文法实用中的一些说明
语法:赋值语句由一个变量,后随一个符号::=,再在后面跟一 个表达式所构成。
语义:先对该语句的右部表达式求值,然后把所得结果与语句 左部的变量相结合,并取代该变量原有的值。 语用:赋值语句可用来计算和保存表达式的值。
程序设计语言的语法描述
来自百度文库
语法图:用图解形式来描述程序设计语言语法规则的工具。
BNF范式:用简括号括住待描述的语法成分,用::=表示语法成 分的定义,| 表示或者。 扩充的BNF范式:{x} 表示可以出现0到多次 [x] 表示可能出现,也可能不出现 (x|y) 表示x和y二者取一 自然语言(口语):用自然语言来描述程序设计语言的语法成 分
〈句子〉 〈主语〉〈谓语〉, 然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓 语〉,再用相应规则的∷=右端代替之。比如,选取了〈主 语〉,并采用规则〈主语〉∷=〈代词〉,
那么得到:〈主语〉〈谓语〉 〈代词〉〈谓语〉,
重复做下去, 句子:“我是大学生”的全部动作过程是:
〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉
语言上的运算 语言L的 闭包记为 L*, L*= L0 L1 L2 ... L0= ε , Ln= L Ln-1= Ln-1 L,n1 语言L的正 闭包记为 L+, L+= L1 L2 L3 ... L+= LL*= L*L L*= L+ ε 如: L1 ={a,b,…y,z} M1 ={1,2…8,9 } (L1M1)={a,b,… y,z,1,2…8,9 } (L1M1)*={a,b,… y,z,1,2…8,9 , aa,1a,…xyz,6789st..} L1(L1M1)*={所有字母打头的字母和数字符号 串}
我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生
“我是大学生”的构成符合上述规则,而 “我大学生是”不符合上述规则,我们 说它不是句子。这些规则成为我们判别 句子结构合法与否的依据,换句话说, 这些规则看成是一种元语言,用它描述 汉语。这里仅仅涉及汉语句子的结构描 述。其中一种描述元语言称为文法。
标识符的语法描述
语法图:
标识符 字母 字母 字母 BNF范式: <标识符>::=<字母>|<标识符> <字母>|<标识符> <数字>
扩充的BNF范式: <标识符>::=<字母> {<字母>| <数字>} 自然语言(口语):标识符是有字母后跟若干个(包括0个)字 母或数字的符号串组成的。
有关定义和记号—回顾 符号:可以相互区别的记号(元素)。 字母表:符号(元素)的非空有穷集合。 符号串:由字母表中的符号组成的任何有穷序 列称为该字母表上的符号串。1.空符号串ε (没 有符号的符号串)是上的符号串 2.若x是上的 符号串,a是的元素,则xa是上的符号串 3. y是 上的符号串,当且仅当它可以由1和2导出。 例如: Σ ={a,b} ε ,a,b,aa,ab,aabba…都是上的符号串