((ab)|b)(a|(ba)*)a转换成右线性文法
时间: 2023-09-14 13:11:29 浏览: 164
偶数个a和b的正则表达式、右线性表达、及DFA
首先将正则表达式转换为NFA,然后再将NFA转换为DFA,最后将DFA转换为右线性文法。
NFA的状态转换图如下:
```
ε
q0 --------> q1 --------> q2
| | ε |
a| | b | a
| | |
V ε V ε V
q3 --------> q4 <-------- q5
ε (ba)*
```
其中,q0是起始状态,q4是接受状态。
根据DFA的定义,我们可以画出DFA的状态转换图:
```
a b
q0 --------> q1 --------> q2
| | a |
| b | |
| V |
q3 <-------- q4 <-------- q5
(ba)* a
```
其中,q0是起始状态,q4是接受状态。
现在我们可以根据DFA的状态转换图来构造右线性文法了。对于每一个状态,我们都可以构造一个产生式,使得该产生式的左部为该状态,右部为该状态可以转移到的所有状态所对应的终结符或非终结符的连接。具体地,对于每一个状态$q_i$,我们可以构造如下的产生式:
- 如果$q_i$是接受状态,则产生式为$q_i \to \epsilon$。
- 否则,设$q_i \xrightarrow{a} q_j$表示从$q_i$状态通过输入字符$a$可以转移到$q_j$状态,$q_i \xrightarrow{a} q_j$是一个转移产生式。
根据上述规则,可以得到以下右线性文法:
```
q0 -> aq1 | bq3
q1 -> aq2 | bq3
q2 -> aq4 | bq5
q3 -> aq4 | bq5
q4 -> a | ε
q5 -> b(q5a)*a
```
阅读全文