编译原理——语言及文法

文章目录

  • 语言及文法
    • 字母表
      • 字母表的运算
      • 串的运算
    • 语言
      • 语言的运算
    • 文法
    • 产生式设计练习

语言及文法

字母表

字母表∑:一个非空有穷符号集合

字母表的运算

  • 字母表∑1和∑2的乘积:

∑ 1 ∑ 2 = { a b ∣ a ∈ ∑ 1 , b ∈ ∑ 2 } ∑_1∑_2=\{ab|a∈∑_1,b∈∑_2\} 12={aba1,b2}

  • 字母表∑的 n 次幂递归定义:

n = 0 : ∑ 0 = { ε } n ≥ 1 : ∑ n = ∑ n − 1 ∑ n=0:∑^0=\{ε\}\\ n≥1:∑^n=∑^{n-1} ∑ n=0:0={ε}n1:n=n1

  • 字母表∑的正闭包(Positive Closure):

∑ + = ∑ ∪ ∑ 2 ∪ ∑ 3 … … ∑^+=∑∪∑^2∪∑^3…… +=23……

  • 字母表∑的克林闭包(Kleene Closure):

∑ ∗ = ∑ 0 ∪ ∑ + = ∑ 0 ∪ ∑ ∪ ∑ 2 ∪ ∑ 3 … … ∑^*=∑^0∪∑^+=∑^0∪∑∪∑^2∪∑^3…… =0+=023……

串:字母表中的符号的一个有穷序列

串s的长度:s中符号的个数,通常记作|s|,例如 |abc|=3

空串:长度为0的串,用ε(epsilon)表示,|ε|=0

串的运算

  • 串的连接:

设x,y,z 是三个字符串,如果 x= y z ,则称 y 是 x 的前缀 z 是 x 的后缀

空串 ε 是连接运算的单位元,对于任何串 s 都有, ε s = s ε = s

  • 串的幂:

串 s 的 n 次幂:
⑴当 n = 0 时, s 0 = ε ⑵当 n ≥ 1 时, s n = s n − 1 s ⑴当 n =0 时,s^0=ε\\ ⑵当 n ≥1 时,s^n=s^{n-1}s n=0时,s0=εn1时,sn=sn1s

语言

设 Σ 是一个字母表, ∀ L ⊆ Σ ∗ ,则 L 称为字母表 Σ 上的一个语言。 设Σ是一个字母表,{\forall}L{\subseteq}Σ^*,则L称为字母表Σ上的一个语言。 Σ是一个字母表,LΣ,则L称为字母表Σ上的一个语言。
句子
∀ x ∈ L , x 称为语言 L 的一个句子。 {\forall}x{\in}L,x称为语言L的一个句子。 xLx称为语言L的一个句子。

语言的运算

Σ 1 和 Σ 2 是字母表, L 1 ⊆ Σ 1 ∗ , L 2 ⊆ Σ 2 ∗ ∗ , 语言 L 1 与 L 2 的乘积是字母表 Σ 1 ∪ Σ 2 上的一个语言, 该语言定义为: L 1 L 2 = { x y ∣ x ∈ L 1 , y ∈ L 2 } Σ_1和Σ_2是字母表,L_1{\subseteq}Σ_1^*,L_2{\subseteq}Σ_2^**,\\ 语言 L_1与 L_2 的 乘积 是字母表 Σ_1∪Σ_2上的一个语言,\\ 该语言定义为:\\ L_1L_2=\{xy|x{\in}L_1,y{\in}L_2\} Σ1Σ2是字母表,L1Σ1L2Σ2语言L1L2的乘积是字母表Σ1Σ2上的一个语言,该语言定义为:L1L2={xyxL1,yL2}


字母表表 Σ , ∀ L ∈ Σ ∗ , L 的 n 次幂是一个语言, 该语言定义为: ⑴当 n = 0 时, L n = { ε } ⑵当 n ≥ 1 时, L n = L n − 1 L 字母表表Σ,{\forall}L{\in}Σ^*,L的n次幂是一个语言,\\ 该语言定义为:\\ ⑴当 n =0 时, L^n=\{ε\}\\ ⑵当 n ≥1 时, L^n = L ^{n-1} L 字母表表ΣLΣ,Ln次幂是一个语言,该语言定义为:n=0时,Ln={ε}n1时,Ln=Ln1L


L 的正闭包 L + 是一个语言, 该语言定义为: L + = L ∪ L 2 ∪ L 3 ∪ L 4 ∪ … … L 的正闭包 L^+ 是一个语言,\\ 该语言定义为:\\ L^+=L∪L^2∪L^3∪L^4∪…… L的正闭包L+是一个语言,该语言定义为:L+=LL2L3L4……


L 的克林闭包 L ∗ 是一个语言, 该语言定义为: L ∗ = L 0 ∪ L ∪ L 2 ∪ L 3 ∪ L 4 ∪ … … L 的克林闭包 L^* 是一个语言,\\ 该语言定义为:\\ L^*=L^0∪L∪L^2∪L^3∪L^4∪…… L的克林闭包L是一个语言,该语言定义为:L=L0LL2L3L4……

文法

文法是用于描述语言的语法结构的形式规则。
文法可以定义为一个四元组 ( V T , V N , S , P ) − 终结符号集合 V T − 非终结符号集合 V N − 产生式集合 P : α → β − 特定的非终结符:开始符号 S 文法可以定义为一个四元组(V_T,V_N,S,P)\\ - 终结符号集合V_T\\ - 非终结符号集合V_N\\ - 产生式集合P:α {\rightarrow}β\\ - 特定的非终结符:开始符号S 文法可以定义为一个四元组(VT,VN,S,P)终结符号集合VT非终结符号集合VN产生式集合Pαβ特定的非终结符:开始符号S


V T ∩ V N = ∅ V T ∪ V N :文法符号集 产生式:描述了将终结符和非终结符组合成串的方法 α ∈ ( V T ∪ V N ) + :产生式的头或左部 , α 中至少包含 V N 中的一个元素 β ∈ ( V T ∪ V N ) ∗ :产生式的体或右部 V_T∩V_N={\emptyset}\\ V_T∪V_N:文法符号集\\ 产生式:描述了将终结符和非终结符组合成串的方法\\ α{\in}(V_T∪V_N)^+:产生式的头或左部 , α中至少包含 V_N 中的一个元素\\ β{\in}(V_T∪V_N)^*:产生式的体或右部 VTVN=VTVN:文法符号集产生式:描述了将终结符和非终结符组合成串的方法α(VTVN)+:产生式的头或左部,α中至少包含VN中的一个元素β(VTVN):产生式的体或右部

符号约定

文法符号:字母表中排在后面的大写字母(如 X 、 Y 、 Z )表示文法符号(即终结符或非终结符)

终结符号串:字母表中排在后面的小写字母(主要是 u 、 v 、 . . . 、 z )表示终结符号串(包括空串)

文法符号串:小写希腊字母,如 α 、 β 、 γ ,表示文法符号串(包括空串)

除非特别说明,第一个产生式的左部就是开始符号

产生式的简写:
α → β 1 ∣ β 2 ∣ … ∣ β n 例: E → E + E ∣ E ∗ E ∣ ( E ) ∣ i d α{\rightarrow}β_1 |β _2 |… |β _n\\ 例:E{\rightarrow} E + E | E * E |( E ) | id αβ1β2βn例:EE+EEE(E)id

产生式设计练习

  • while (expression) statement
    s t m t → w h i l e ( e x p r ) s t m t stmt{\rightarrow}while ( expr)stmt stmtwhile(expr)stmt

  • for (expression 1 ; expression 2 ; expression 3
    statment

s t m t → f o r ( e x p r ; e x p r ; e x p r ) s t m t stmt{\rightarrow}for ( expr ; expr; expr) stmt stmtfor(expr;expr;expr)stmt

  • int ( float , double , char ) id 1 , id 2 ……

t y p e → i n t ∣ f l o a t ∣ d o u b l e ∣ c h a r i d l i s t → i d l i s t , i d ∣ i d d e c l → t y p e , i d l i s t type{\rightarrow}int |float | double | char\\ idlist{\rightarrow}idlist , id | id\\ decl{\rightarrow}type,idlist typeintfloatdoublecharidlistidlist,ididdecltype,idlist

你可能感兴趣的:(编译原理,编辑器)