编译原理2文法和形式语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:试设计一个表示所有标识符的文法
I → L|IL| ID
L→ a|b|c|……|x|y|z D→ 0|1|2……|9 若设计为
I → L| ID
L→ a|b|c|……|x|y|z D→ 0|1|2……|9 则不正确
的算术表达式, 例:用文法定义一个含+,*的算术表达式,定义用下述自 用文法定义一个含 , 的算术表达式 然语言描述:变量是一个表达式; 是算术表达式, 然语言描述:变量是一个表达式;若E1和E2是算术表达式, 和 是算术表达式 也是算术表达式。 则E1+E2,E1*E2,(E1)也是算术表达式。 也是算术表达式 E →i| E+E|E*E|(E) 例:设字母表Σ={a,b},试设计一个文法,描述语言 设字母表Σ , ,试设计一个文法, L={abna|n ≥0}。 。 G=({A,B},{a,b},{A →aBa,B →Bb| ε},A)
2.推导与广义推导 推导与广义推导 定义:对于文法G,如果存在一直接推导序列 定义:对于文法 , α 0⇒ α 1⇒ α 2⇒……⇒ α n (n≥1) ⇒ ) 则称α 推导出α 则称α 0推导出α n 记为: 记为: α 0 ⇒ n,n为推导长度 α 为推导长度 若n≥0,则记为: α 0 ⇒ α n ,则记为: 那么我们前面讨论从文法G[E]推出 ∗i的过程可写为: 那么我们前面讨论从文法 推出i+i∗ 的过程可写为: 推出 的过程可写为 E ⇒i+i∗i ∗ E ⇒i+i∗i 与 E ⇒ E ∗ 结论:直接推导的长度为1,推导的长度大于等于1, 结论:直接推导的长度为 ,推导的长度大于等于 ,广义 推导的长度大于等于0。 推导的长度大于等于 。
作业: 作业: 1.试设计出一个关于自然数的文法。 试设计出一个关于自然数的文法。 试设计出一个关于自然数的文法 2.设计一文法,使其语言为奇数集,并且不以0开头。 设计一文法,使其语言为奇数集,并且不以 开头 开头。 设计一文法 3.试设计一个文法,描述语言L={ambn|m,n ≥1}。 试设计一个文法,描述语言 试设计一个文法 。
2.3 文法和语言的形式定义 Σ:为某一字母表, L:一个语言, L⊂Σ 为某一字母表, :一个语言, 字母表 ⊂Σ* ⊂Σ 2.3.1 形式语言 1.定义:序列的有穷集合。具体地说每个形式语言都是某个字母 定义:序列的有穷集合。 定义 表上按某种规则构成的所有符号串的集合, 表上按某种规则构成的所有符号串的集合,反之任何一个字母 表上符号串的集合均可以定义一个形式语言。 表上符号串的集合均可以定义一个形式语言。 2.表示方法: 表示方法: 表示方法 1)枚举法。当语言为有穷集合时使用。 )枚举法。当语言为有穷集合时使用。 2)文法描述。当语言为无穷集合时使用。 )文法描述。当语言为无穷集合时使用。
Байду номын сангаас
例:设字母表Σ={0,1},则Σ+可描述为: Σ+={0,1,00,10,11,01,000,100……} 若用A表示Σ+,用A →0表示符号串0∈A,或A生成符号0, 符号“→”读作“生成”或“由⋯ ⋯组成” 则集合A可以表示成: A →0 A →1 A →A0 A →A1
2.3.2 文法和语言的形式定义 1.规则:又称产生式,它是一个符号与一个符号串的有序对 规则:又称产生式, 规则 (A, β ),通常写为A → β或A ::= β , ),通常写为 规则的作用:规定了一个语言的组成与结构( 规则的作用:规定了一个语言的组成与结构(一个语言的语 法规则) 法规则)。 规则中出现的符号: 规则中出现的符号 非终结符: 非终结符:出现在规则左部能派生出符号或符号串的那些符 通常用大写字母表示。 号。通常用大写字母表示。 终结符:不属于非终结符的那些符号, 终结符:不属于非终结符的那些符号,是组成语言的基本符 通常用小写字母表示。 号,通常用小写字母表示。
2.3.3 语言的形式定义 1.直接推导 直接推导 是一文法, 直接推出x 令G是一文法,我们从 是一文法 我们从xAy直接推出 α y,即xAy ⇒ x α y,仅 直接推出 , , A → α是G的一个规则且 ∈ (VN∪ VT)*,也就是说从符号串 的一个规则且x,y 的一个规则且 也就是说从符号串 xAy直接推出 α y仅使用一次规则。 直接推出x 仅使用一次规则。 直接推出 仅使用一次规则 例:设有文法:G[E] 设有文法: 1、E → E+T|T 、 2、T → T∗F|F 、 ∗ 3、F →(E)|i 、 对从起始符号E到句子 到句子i+i∗ 的直接推导如下 对从起始符号 到句子 ∗i的直接推导如下 : E⇒E+T⇒T+T⇒F+T⇒i+T⇒i+T∗F⇒i+F∗F ⇒ ⇒ ⇒ ⇒ ⇒ ∗ ⇒ ∗ ⇒i+i∗F⇒i+i∗i ∗ ⇒ ∗
A → α1 A → α2
••••••
A → αn A → α1|α2| ••••••|αn每个αn称为候选式 α α 每个α
约定:第一条规则的左部为识别符号;对文法 可 约定:第一条规则的左部为识别符号;对文法G可只将规则 写出。 写出。
例:设字母表Σ={a,b},试设计一个文法,描述语言 设字母表Σ , ,试设计一个文法, L={a2n,b2n|n ≥1}。 。 G=(VN,VT,P,S) 其中 N={A,B,D}, VT={a,b},S=A, 其中V P={A → aa|aaB| bb|bbD B → aa|aaB D→ bb|bbD} 或P={A → B|D B → aa|aBa D→ bb|bDb} 结论: 对于一个给定的语言 对于一个给定的语言, 结论:1.对于一个给定的语言,描述该语言的文法不是唯一的 2.G和G,是两个不同的文法,如果他们描述的语言相同,那么 和 是两个不同的文法,如果他们描述的语言相同, 称G和G,为等价文法。 和 为等价文法。 若P为A → aa|bb|Abb |A aa则不 为 则不 正确
A2=AA={aa, ab, ba, bb} , , , A3=A2A={aaa, aab, aba,abb ,baa ,bab ,bba ,bbb} , , ,
10)集合A的正闭包和闭包 )集合 的正闭包和闭包 定义:集合 的正闭包表示为 的正闭包表示为A 定义:集合A的正闭包表示为 +: A+=A1 ∪A2 ∪… ∪ Ak … 定义:集合 的闭包符号记为 的闭包符号记为A*( 定义:集合A的闭包符号记为 (又称为反闭包或星闭 包): A*=A0∪A1 ∪A2 ∪… ∪ Ak … 根据定义有: 根据定义有: A*= A0∪ A+
8)符号串的幂 ) 定义: 是字母表上的符号串, 的幂运算为: 定义:设x是字母表上的符号串,则x的幂运算为: 是字母表上的符号串 的幂运算为 x0=ε, x1=x, x2=xx, … … ,xn=xn-1x(=x xn-1) ε , , 9)符号串集合的幂:(集合的相乘) )符号串集合的幂:(集合的相乘) :(集合的相乘 定义: 为符号串集合, 定义:若A为符号串集合,则符号串集合的幂为: 为符号串集合 则符号串集合的幂为: A0= {ε } , A1=A ,A2=AA,… … , An-1=An-2A, ε , , An=An-1A(=AAn-1), ( 例:若A={a,b} , 则 A1=A={a,b}; , ;
例:若A={a,b},则 , A+=A1 ∪A2 ∪…={a,b,aa,ab,ba,bb,aaa,aab, aba,abb,baa,bab,bba,bbb,…} A*= A0∪ A+ ={ε ,a,b,aa,ab,ba,bb,aaa,aab, ε aba,abb,baa,bab,bba,bbb,…}
2.文法 文法 文法是规则的非空有穷集合,用四元组 文法是规则的非空有穷集合,用四元组G=(VN,VT,P,S),其 , 是规则中非终结符的集合; 是规则中终结符的集合, 中VN是规则中非终结符的集合; VT是规则中终结符的集合, VN ∩ VT= ∅,字汇表 字汇表V= VN∪ VT, P是规则的集合; S是一 是规则的集合; 是一 是规则的集合 个非终结符,称为文法的开始符号或识别符号, 个非终结符,称为文法的开始符号或识别符号,他至少要 在一条规则中作为规则左部出现。 在一条规则中作为规则左部出现。
~
~
6)符号串集合的乘积 ) 定义: 为两个符号串集合, 定义:设A,B为两个符号串集合,其乘积为 , 为两个符号串集合 AB={xy|x∈A,y∈B} ∈ , ∈ 例: A={ab,bc},B={ac,cb} 则AB={abac,abcb,bcac,bccb} , AB≠BA 因为: 因为: εx=xε=x ε 所以有: ε 所以有:{ε }A=A {ε } =A; ε 7)空集 ∅:不含元素的集合称为空集 ) ∅ ≠ {ε } ; ε ∅A=A ∅= ∅
任何符号与空串的连结的结果仍为原来的符号串
x=abbc,y=abbbcc 则 xy=abbcabbbcc ; x ε = ε x=x
4)符号串的逆 ) 定义:把一个符号串 的所有符号进行倒置 的所有符号进行倒置, 定义:把一个符号串x的所有符号进行倒置,所产生的 新串 x ,就为原符号串的逆 。 的逆为: 若x=abbc,则 x的逆为: = cbba , 的逆为 x 5)符号串前缀、后缀和子串 )符号串前缀、 定义:设x是一个符号串,我们把从 的尾部(前部)删 是一个符号串, 的尾部( 定义: 是一个符号串 我们把从x的尾部 前部) 去若干个(包括0个 符号之后所余下的部分称为x的前 去若干个(包括 个)符号之后所余下的部分称为 的前 后缀); );从一个符号串后删去一个前缀和一个后缀 缀(后缀);从一个符号串后删去一个前缀和一个后缀 之后所余下的部分称为符号串的子串。 之后所余下的部分称为符号串的子串。 例:abc 前缀: 后缀: 前缀:a,ab,abc ,ε ;后缀:c,bc,abc ,ε; 子串: 子串:a,ab,abc, c,bc, b ,ε ,
第二章 文法和形式语言
对语言的非形式化描述从三个因素考虑 1.语法:对语言数据结构的定义 语法: 语法 2.语义:语言的含义 语义: 语义 3.语用:从用户的角度去描述语言 语用: 语用 形式化的方法: 形式化的方法:是用一套带有严格规定的符号体系来 描述问题的理论和方法。 描述问题的理论和方法。
2.2 字母表和符号串的基本概念 2.2.1 字母表和符号串 1)字母表:元素的非空有穷集合 非空有穷集合 )字母表:元素的非空有穷 ∑={a, b,c} ,V={0, 1}, , P={x| x∈自然数} 2)符号(字符):字母表中的元素 )符号(字符):字母表中的元素 ): ∑中的符号: a, b,c 中的符号: 中的符号 3)符号串:符号的有穷序列 )符号串:符号的有穷序列 a, b,c,cabccad,ab, ba ε :表示不含任何符号的符号串。 表示不含任何符号的符号串。 4)符号串集合:字母表上的若干个符号串组成的集合 )符号串集合: A={a, aa, ba}
2.2.2 符号串的运算 1)符号串相等:设x,y是∑上的两个符号串,若x,y的相同位 上的两个符号串, )符号串相等: 是 上的两个符号串 的相同位 置上的符号完全相同,则称x,y相同 相同。 置上的符号完全相同,则称 相同。 若x=abbc,y=abbc 则x=y; 若x=abbc,y=abbcc,则x≠y 则 2)符号串长度:符号串‘x’所包含的符号个数。用‘|x|’表 )符号串长度:符号串‘ 所包含的符号个数。 表 所包含的符号个数 示。 |abcd|=4; | ε |=0; 3)符号串的连结:设x,y是∑上的两个符号串,把y的所有符 )符号串的连结: 上的两个符号串, 是 上的两个符号串 的所有符 号相继写在符号串x的最后符号之后所得到的新符号串 的最后符号之后所得到的新符号串, 号相继写在符号串 的最后符号之后所得到的新符号串,称为 x与y的连接,用xy表示。 的连接, 表示。 与 的连接 表示