编译原理27.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

很多时候,不用将文法G的四无组显式地表示出来, 而只将产生式写出。一般约定,第一条产生式的左 部是识别符号;用<>括起来的是非终结符,不用<> 括起来的是终结符,或者用大写字母表示非终结符, 用小写字母表示终结符。
另一种表示方法: 将G写成G[S],其中S是识别符号。 如例3.1写成: G:S→0S1 S →01
符号串的头、尾、固有头和固有尾
如果z=xy是一符号串,则x是z的头,y是z的尾。 如果x是非空的,那么y是固有尾;如果y是非空的,那么 x是固有头。
书写方式说明
当我们对符号z=xy的头感兴趣而对其余部分不感兴趣 时,我们可以采用省略写法:z=x…; 如果只是为了强调x在符号串z中的某处出现,则可表 示为:z=…x…; 符号t是符号串z的最后一个符号,则可表示为:z=…t。
因为对任意符号串x有εx=x ε=x,所以有{ε}A=A {ε} =A
指定字母表∑之后,可用∑*表示∑上的所有有穷长的串 的集合。
如:∑={0,1},则∑ *={ε,0,1,11,01,10,000,001…}
也可表示为字母表的方幂方式: ∑ *= ∑0∪ ∑1 ∪ ∑2 ∪ ∑n …
∑+ =∑1 ∪ ∑2 ∪ ∑n … ∑* 称为集合的闭包,∑ +称为集合的正闭包。
编译原理 第三章
文法和语言
ቤተ መጻሕፍቲ ባይዱ
一个程序设计语言,它的完整定义应包括语法和语义两 个部分。
语法是指一组规则,用它可以形成和产生一个合适的程序。
语义分静态语义和动态语义 静态语义是一系列的限定规则,并确定哪些合乎语法 的程序是合法的。
动态语义也称运行语义或执行语义,表明程序要做什 么,执行什么? 文法是阐明语法的工具。
例3.2 文法G= (VN,VT,P,S) 其中:VN={标识符,字母,数字} VT={a,b,c,…,x,y,z,0,1,…9} p={<标识符>→<字母> <标识符> →<标识符><字母> <标识符> →<标识符><数字> <字母> →a <字母> →b
… <字母> →z <数字> →0
… <数字> →9} S=<标识符>
推导的概念
(1) 直接推导 A =>b (2) 长度为n(n≥1)的推导 A=+>b (3)长度为n(n≥0)的推导 A=*>b
定义3.2 如果α→β是文法G=(VN,VT,P,S)的规则(或者说是P
中的一个产生式),γ和δ是V*中的任意符号,若有符号 串v,w满足:
v= γ α δ, w= γ β δ 则说v(应用规则α→β)直接产生w,或者说w是v的直接推导 或说w直接归约到v,记作 v=>w
“我是大学生”的推导过程
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我 | 你 | 他 <名词>::=王明 | 大学生 | 英语 <谓语>::=<动词><直接宾语> <动词>::=是 | 学习 <直接宾语>::=<代词>|<名词>
<句子> => <主语><谓语> => <代词><谓语> => 我 <谓语> =>我 <动词><直接宾语> =>我 是 <直接宾语> =>我 是 <名词> =>我 是 大学生
定义3.1 文法G定义为四元组(VN,VT,P,S) 其中: VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合。 S称作识别符号或开始符号,它是一个非终结符, 至少要在一条规则中作为左部出现。
VN和VT不含公共的元素,即VN∩VT=Φ 例3.1:文法G= (VN,VT,P,S),其中VN ={S}, VT ={0,1}, P={S→0S1,S →01}。
符号串:由字母表中的符号组成的任何有穷序列称为符 号串。
在符号串中,符号是有序的,如ab和ba不相等。abca和aabc 不相等。
符号串的表示
(1)如果符号串x中有m个符号,则称其长度为m。 表示为|x|=m。
(2)允许空符号串,即不包含任何符号的符号串。 用ε表示,其长度为0,即|ε |=0。
符号串的连接:设x和y是符号串,它们的连接xy是把y的符 号写在x的符号之后,得到的符号串。
如:x=ST,y=abu,则xy=STabu.。
显然:εx=xε =x
符号串的方幂:设x是符号串,把x自身连接n次得到的符号 串z,即:z=xx…xx,称为符号串x的方幂,写作:z=xn, 对x的方幂表示为:x0= ε, x1=x, x2=xx, x3=xxx 对AB的方幂表示为: (AB)0= є, (AB)1=AB, (AB)2=ABAB
符号串集合:若集合A中的一切元素是某字母表中的符号 串,则称A为该字母表上的符号串集合。
符号串集合的乘积:两个符号串集合A和B的乘积定义为: AB={xy|x∈A且y ∈B},即AB是满足x属于A,y属于B的所 有符号串xy所组成的集合。 如A={a,b},B={c,d},则AB={ac,ad,bc,bd}.
符号 => 是指使用一条规则,代替=>左边的某个符号, 产生右端的符号串
显然,按上述方法,还可以推导出其它很多句子 如:
王明是大学生 王明学习英语 我学习英语 他学习英语 你学习王明 你是工人
只要将语法进行一定的改造,它能识别一些自然语言。
3.2 符号和符号串
• 字母表:是元素的非空有穷集合。
我们把字母表中的元素称为符号,因此字 母表也称为符号集。
∑*= ∑0∪ ∑+ ∑ + =∑ ∑*= ∑* ∑ 若x是∑*的元素,则表示为x∈∑*,否则 x∈∑*
3.3 文法和语言的形式定义
规则,也称重写规则、产生式或生成式是形如: α→β或α::=β的(α,β)有序对,其中α是某字母表V的正闭 包V+中的一个符号,β是某字母表V的闭包V*中的一 个符号。 α称为规则的左部,β称为规则的右部。
3.1 文法的直观概念
自然语言的例子: 对于“我是大学生”类似的句子有以下语法规则
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我 | 你 | 他 <名词>::=王明 | 大学生 | 英语 <谓语>::=<动词><直接宾语> <动词>::=是 | 学习 <直接宾语>::=<代词>|<名词>
相关文档
最新文档