语法到正则表达式

时间:2014-01-29 18:03:54

标签: context-free-grammar regular-language left-recursion automata-theory

找到接受给定语法的相同语言的正则表达式的步骤是什么?

  
      
  • S - > b | AA
  •   
  • A - > aA | Abb | ε
  •   

2 个答案:

答案 0 :(得分:2)

我正在写一些试图理解的东西(希望它会有所帮助):

  1. 根据S --> b,字符串'b'是语法语言中的字符串。

  2. 使用A的作品A --> aA | &,我们可以生成:“A后跟任意数量的a s”或RE:{{1 (*因为epsilon)

  3. 同样,使用a*A我们可以生成“任意数量的A ---> Abb | & s后跟bb”,或者生成RE:A(*因为epsilon )

  4. 使用A(bb)*使用2和3可以生成:A

  5. 注意最终变量必须转换为终端,因此A可以转换为a*(bb)*abb

  6. 从4开始,使用&我们可以生成:AA

  7. 所以语法生成的语言是a*(bb)*a(bb)*

    程序阅读这个答案:Constructing an equivalent Regular Grammar from a Regular Expression我从RE解释为语法,我觉得答案会帮助你更好地理解。

答案 1 :(得分:0)

语法:

  • S - > AS | a
  • A - > SA | b

    1. 根据S - > a,字符串a是语法语言。
    2. 根据A - > b,字符串b是语法语言。
    3. 使用A - > SA,我们可以生成A - > SA; A - > SSA; A - > SSSA; ......
    4. 使用S - > AS,我们可以生成S - > AS; S - > AAS; S - > AAAS; ......

我怎样才能达到正则表达式,这个语法的解决方案?


这些规则有用吗?

  • x = yx + t解是y * t
  • x = xy + t解决方案是ty *

S = AS +一个; A = SA + B

  

S = A * a; A = S * B


从A = SA + b和S = AS + a

  • 我得到A = S * b且S = S * bS + a
  • 所以我得到S =(S * b)* a
  • S =(A * B)*一

纠正@GrijeshChauhan ??