正则文法是一种描述正则的文法 语。 正则文法是一个数学对象 G,它由四个部分组成,G = (N, E , P, S),其中
- N:非空的、有限的非终结符集合,
- E:一组有限的终结符,或字母,符号,
- P:一组语法规则,每个规则都有一个形式
- A ⇢ aB
- A⇢a
- A ⇢∈, 这里 ∈=空字符串, A, B ∈ N, a ∈ ∑
- 小号∈N是开始符号。
这个语法可以有两种形式:
- 右线性正则文法
- 左线性正则语法
右线性正则文法
在这类正则文法中,右边的所有非终结符都存在于最右边的位置,即;正确结束。
例子 :
A ⇢ a, A ⇢ aB, A ⇢ ∈
where,
A and B are non-terminals,
a is terminal, and
∈ is empty string
S ⇢ 00B | 11S
B ⇢ 0B | 1B | 0 | 1
where,
S and B are non-terminals, and
0 and 1 are terminals
左线性正则语法
在这种类型的正则文法中,右边的所有非终结符都存在于最左边的地方,即;左端。
例子 :
A ⇢ a, A ⇢ Ba, A ⇢ ∈
where,
A and B are non-terminals,
a is terminal, and
∈ is empty string
S ⇢ B00 | S11
B ⇢ B0 | B1 | 0 | 1
where
S and B are non-terminals, and
0 and 1 are terminals
左线性到右线性正则语法
在这种类型的转换中,我们必须将所有左手非终结符向右移动,如下面的示例所示:
Left linear Right linear
A -> Ba A -> abaB
B -> ab B -> epsilon
OR
A -> abB
B -> a
因此,可以这样做以给出多个答案。上面解释的示例除了给定的一次之外还有多个答案。
右线性到左线性正则语法
在这种类型的转换中,我们必须将所有右手非终结符向左移动,如下面的示例所示:
Right linear Left linear
A -> aB A -> Baba
B -> ab B -> epsilon
OR
A -> Bab
B -> a
因此,可以这样做以给出多个答案。上面解释的示例除了给定的一次之外还有多个答案。