简单正则表达式的左线性和右线性语法

时间:2015-10-12 23:28:17

标签: grammar regular-language computation-theory

我无法为下面的正则表达式提出左线性和右线性语法。

0(0+1)*+10^+

我对加号闭包的作用也很困惑。

这是我得到的左线性语法,但我不确定这是否正确:

    P: S--> 0A | 1A
       A--> A0|A1|0S|0| epsilon

谢谢!

1 个答案:

答案 0 :(得分:1)

查找左线性语法和右线性语法的一种常用方法是找到与正则表达式具有相同语言的NFA,然后使用以下机械变换将该NFA转换为左线性语法或右线性语法: / p>

  • 对于每个州q,引入非终结T q
  • 对于字符a(或其中a =ε)的每个转换(q,r),添加生产T q →aT r (对于左线性语法) )和T r →T q a(对于右线性语法)。

然后,对于左线性语法:

  • 对于每个接受状态q,添加生产T q →ε
  • 对于起始状态为q 0 的左线性语法,将起始符号设为符号T q 0

然后,对于右线性语法:

  • 为每个接受状态q添加生产S→T q 的起始符号S.
  • 为起始状态q 0 添加生产T q 0 →ε。

尝试在这里应用这个想法,你最终会为你的语言生成左线性语法和右线性语法。它们可能不是最有效的语法,但它们可以工作。