📜  正则文法(模型正则文法)

📅  最后修改于: 2021-09-28 10:16:44             🧑  作者: Mango

先决条件:乔姆斯基层次结构

类型 3 语法/正则语法:
正则文法生成正则语言。它们的左侧有一个非终结符,右侧由单个终结符或单个终结符后跟一个非终结符组成。

作品必须采用以下形式——

A ⇢ xB 
A ⇢ x
A ⇢ Bx
where A, B ∈ Variable(V) and x ∈ T*  i.e. string of terminals.

正则文法的类型:

  • 左线性语法(LLG)
  • 右线性文法(RLG)

1. 左线性语法(LLG)——
在 LLG 中,如果所有的产生式都是形式,那么产生式就是形式

A ⇢ xB
A ⇢ x
where A,B  ∈ V and x ∈ T*

2. 右线性文法(RLG)——
在 RLG 中,如果所有的产生式都是形式,那么产生式就是形式

A ⇢ Bx
A ⇢ x
where A,B ∈ V and x ∈ T*

由类型 3 文法生成的语言是常规语言,可以为其设计 FA。 FA 也可以转换为 type-3 语法

示例 –用于接受以 b 开头的字符串的FA

.

∑  = {a,b}
Initial state(q0) = A
Final state(F)  = B

FA对应的RLG为

A ⇢ bB   
B ⇢  ∈/aB/bB 

上面这个文法就是RLG,可以直接通过FA写出来。

此文法派生出以 B 表示的字符串

上面的 RLG 可以导出以 b 开头的字符串,然后是任何输入符号(即 ∑ ={a, b} 可以接受)。

The regular language corresponding to RLG is
 L= {b, ba, bb, baa, bab ,bba,bbb ..... }

如果我们颠倒上述RLG的上述产生,那么我们得到

A ⇢ Bb  
B ⇢  ∈/Ba/Bb 
It derives the language that contains all the strings which end with b.
i.e. L' = {b, bb, ab, aab, bab, abb, bbb .....}

所以我们可以得出结论,如果我们有代表语言 L 的 FA 并且如果我们将它转换为 RLG,这再次代表
语言L,但是在反转RLG 之后我们得到了代表语言L’的LLG(即L 的反转)。

要将 RLG 转换为 L 语言的 LLG,需要遵循以下程序:

Step 1: Reverse the FA for language L
Step 2: Write the RLG for it.
Step 3: Reverse the right linear grammar.
after this we get the grammar that generates the language that represents the LLG for the same language L.

这表示与上述将 RLG 转换为 LLG 的过程相同

这里 L 是 FA 的语言,而 L R是语言 L 的反转。
例子 –
上面的 FA 表示语言 L(即输入符号 a 和 b 上以 b 开头的所有字符串的集合)。
我们正在将其转换为 LLG。

第1步 –
FA 的反转是

代表所有以 b 开头的字符串的 FA 的反转。

第2步 –
这个反向 FA 对应的 RLG 是

B ⇢ aB/bB/bA
A ⇢  ∈

第 3 步 –
反转上面的 RLG 我们得到

B ⇢ Ba/Bb/Ab
A ⇢  ∈

所以这是语言 L 的 LLG(代表所有以 b 开头的字符串)。
L= {b, ba, bb, baa, bab , bba, bbb ….. }

RLG 到 FA 的转换:

  • 从第一次生产开始。
  • 从每个左字母(或变量)转到其后的符号。
  • 开始状态——
    这将是第一个生产状态。
  • 最终状态——
    以那些以终端结束而没有进一步非终端的状态为例。

例子 –
Language(L) 的 RLL 语法,表示所有以 0 结尾的字符串的集合。  

A ⇢ 0A/1B/0B
B ⇢ ∈

所以对应于 RLG 的 FA 可以找到为
从变量 A 开始并使用它的产生式。

  • 对于产生式 A ⇢ 0A ,这意味着在获得输入符号 0 后,转换将保持相同的状态。
  • 对于产生式 A ⇢ 1B ,这意味着在获得输入符号 1 后,状态将从状态 A 转移到状态 B。
  • 对于产生式 A ⇢ 0B ,这意味着在获得输入符号 1 后,状态将发生从状态 A 到 B。
  • 对于生产 B ⇢ ∈,这意味着不需要状态转换。这意味着它将是相应 FA 中的最终状态,因为 RHS 是终端。

所以对应 RLG 的最终 NFA 是

以 0 结尾的所有字符串的集合

LLG 到 FA 的转换:

解释 –
首先将代表Language(L)的LLG转换为代表L语言反转的RLG(即L R ),然后设计与之对应的FA(即FA for Language L R )。然后反转 FA。那么最后的 FA 是语言 L 的 FA)。

LLG 到 RLG 的转换:
例如,上面的文法代表语言L(即所有以b开头的字符串的集合)
此文法的 LLG 是

B ⇢ Ba/Bb/Ab
A ⇢  ∈

第1步 –
将LLG转换为FA(即转换过程同上)

第2步 –
反转FA(即初始状态转换为最终状态并将最终状态转换为初始状态并反转所有边缘)

第 3 步 –
写出对应于反向 FA 的 RLG。

A ⇢  bB
B ⇢ aB/bB/∈

它们可以很容易地转换为其他

都具有相同的力量,可以转换为其他