一、正则表达式:
前提知识:3型文法(Type-3 Grammar):
α → β \alpha\to\beta α→β
该文法又被称为正规文法、正则文法 (Regular Grammar,RG ):
- 右线性(Right Linear)文法: A → ω B A\to\omega{B} A→ωB或 A → ω A\to\omega A→ω;其中 A A A和 B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* α∈VT∗。
- 左线性(Left Linear) 文法: A → B ω A\to{B}\omega A→Bω或 A → ω A\to\omega A→ω;其中 A A A和 B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* α∈VT∗。
- 左线性文法和右线性文法都称为正则文法。
实际举例:
3型语言(正则语言):
- 由正则文法(3型文法) G G G生成的语言 L ( G ) L(G) L(G)。
正则表达式又称为正规式!所以下文中提到的正则和正规是一回事!
①正则表达式:
- 正则表达式(Regular Expression,RE )是一种用来描述正则语言的更紧凑的表示方法。
- 例如: r = a ( a ∣ b ) ∗ ( ε ∣ ( . ∣ _ ) ( a ∣ b ) ( a ∣ b ) ∗ ) r=a(a|b)^*(\varepsilon|(.|\_)(a|b)(a|b)^*) r=a(a∣b)∗(ε∣(.∣_)(a∣b)(a∣b)∗)
- 正则表达式可以由较小的正则表达式按照特定规则递归构建。每一个正则表达式 r r r定义(表示)一个语言,记为 L ( r ) L(r) L(r)。这个语言也是根据 r r r的子表达式所表示的语言递归定义的。
②正则表达式的定义:
- ε \varepsilon ε是一个 R E RE RE, L ( ε ) = { ε } L(\varepsilon)={\varepsilon} L(ε)={ε}.
- 如果 a ∈ Σ a\in\Sigma a∈Σ,则 a a a是一个 R E RE RE, L ( a ) = { a } L(a)={a} L(a)={a}.
- 假设 r r r和 s s s都是 R E RE RE,表示的语言分别是 L ( r ) L(r) L(r)和 L ( s ) L(s) L(s),则:
- r ∣ s r|s r∣s是一个 R E RE RE, L ( r ∣ s ) = L ( r ) ∪ L ( s ) L(r|s)=L(r)\cup{L(s)} L(r∣s)=L(r)∪L(s).
- r s rs rs是一个 R E RE RE, L ( r s ) = L ( r ) L ( s ) L(rs)=L(r)L(s) L(rs)=L(r)L(s).
- r ∗ r^* r∗是一个 R E RE RE, L ( r ∗ ) = ( L ( r ) ∗ ) L(r^*)=(L(r)^{*}) L(r∗)=(L(r)∗).
- ( r ) (r) (r)是一个 R E RE RE, L ( ( r ) ) = L ( r ) L((r))=L(r) L((r))=L(r).
运算的优先级:* > 连接 > | 。
- 实际举例:
③RE(正则表达式)的代数定律:
④正则文法与正则表达式等价:
前提介绍:一个正则语言可以由于正则文法定义,也可以由正则表达式定义;对任何正则文法 G G G,存在定义同一语言的正则表达式 r r r,对任何正则表达式 r r r,存在生成同一语言的正则文法 G G G;有一些正则语言更容易使用正则表达式定义,有一些正则语言更容易使用正则文法定义。
正则表达式又称为正规式!所以下文中提到的正则和正规是一回事!
- 正则表达式转换为正则文法:
- 将 Σ \Sigma Σ上面的一个正则式 r r r转换为文法 G = ( V N , V T , S , P ) G=(V_N,V_T,S,P) G=(VN,VT,S,P)。令 V T = Σ V_T=\Sigma VT=Σ,确定产生式和 V N V_N VN的元素采用如下的办法:
- 选择一个非终结符 S S S生成类似于产生式的形式: S → r S\to{r} S→r,并且将 S S S定为 G G G的识别符号。为了表述方便,将 S → r S\to{r} S→r称为正规式产生式,因为在 → \to →的右部中含有== . 、 ∗ ∣ .、*| .、∗∣==等正规式符号,不是V中的符号。
- 若 x x x和 y y y都是正规式(正则表达式):
- 对于形如 A → x y A\to{xy} A→xy的正规式产生式,重写为 A → x B 、 B → y A\to{xB}、B\to{y} A→xB、B→y两个产生式,其中 B B B是新选择的非终结符,即 B ∈ V N B\in{V_N} B∈VN。
- 对于形如 A → x ∗ y A\to{x^*y} A→x∗y的正规式产生式,重写为 A → x B 、 A → y 、 B → x B 、 B → y A\to{xB}、A\to{y}、B\to{xB}、B\to{y} A→xB、A→y、B→xB、B→y,其中 B B B为一个新的非终结符。
- 对于形如 A → x ∣ y A\to{x\vert{y}} A→x∣y的正规式产生式,重写为 A → x 、 A → y A\to{x}、A\to{y} A→x、A→y。
- 不断利用上述规则做变换,直到每个产生式都符合正规文法的形式。
补充说明:左线性文法和右线性文法都称为正则文法。
右线性(Right Linear)文法: A → ω B A\to\omega{B} A→ωB或 A → ω A\to\omega A→ω;其中 A A A和 B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* α∈VT∗。
左线性(Left Linear) 文法: A → B ω A\to{B}\omega A→Bω或 A → ω A\to\omega A→ω;其中 A A A和 B B B都是非终结符, α ∈ V T ∗ \alpha\in{V_T}^* α∈VT∗。
-
实际举例:
-
正则文法转换为正则表达式:
-
这一转换过程基本上是上面的逆过程,最后只剩下一个开始符号定义的正规式。
文法产生式 | 正规式(正则表达式) | |
---|---|---|
规则一 | A → x B A\to{xB} A→xB、 B → y B\to{y} B→y | A = x y A=xy A=xy |
规则二 | A → x A ∣ y A\to{xA\vert{y}} A→xA∣y | A = x ∗ y A=x^*y A=x∗y |
规则三 | A → x A\to{x} A→x、 A → y A\to{y} A→y | A = x ∣ y A=x\vert{y} A=x∣y |
- 实际举例:
⑤正则定义:
- 正则定义式具有如下形式的定义序列:
d 1 → r 1 d_1\to{r_1} d1→r1
d 2 → r 2 d_2\to{r_2} d2→r2
. . . ... ...
d n → r n d_n\to{r_n} dn→rn
- 其中:
- 每一个 d i d_i di都是一个新符号,它们都不在字母表 Σ \Sigma Σ中,而且各不相同。
- 每个 r i r_i ri是字母表 Σ ⋃ { d 1 , d 2 , . . . , d i − 1 } \Sigma\bigcup\{d_1,d_2,...,di-1\} Σ⋃{ d1,d2