长度为3的字符串的上下文自由语法

时间:2014-10-29 14:46:22

标签: context-free-grammar

我需要创建一个无上下文语法,它将生成{a,b}上的字符串,其长度可被3整除。我真的不知道从哪里开始。如果有人可以提供一个类似的例子或一个非常感激的起点。

1 个答案:

答案 0 :(得分:2)

好的,让我们先做一些头脑风暴。

  • 每个常规语法都是无上下文的吗?是。
  • 我们是否知道任何使字符串可分割 3的常规语法?嗯,这不是太难,我们这样做。
  • 接下来的事情是从常规语法到有限自动机的转换算法。
  • 将自动机转换为接受补码的自动机非常简单(只需将转换函数设为总数并切换接受和非接受状态)。
  • 下一步是将有限自动机转换回常规语法(也称为算法)。
  • 现在我们有常规的语法,从第一行我们知道,每个reg。语法也是CFG。

肯定有更直接的解决方案(假设生成可以被3整除的句子形式,然后再添加1或2个字符),但是这可以让你对这些东西的所有内容有所了解。连接。

希望这至少能回答你的问题。请随时询问更多详细信息。

编辑: 我还添加了生成这种语言的常规语法(初始非终结符为0):

0 -> a1 | b1 | a | b
1 -> a2 | b2 | a | b
2 -> a0 | b0

Basicaly语法所做的是试图将字长整除3,但每当它应该添加第三个字符时,它就不允许你终止生成。

相关问题