有关创建“上下文无关文法”(Tips for creating “Context Free Gram

2019-07-20 17:14发布

我是新来的CFG的,
有人可以给我的提示创建CFG产生一些语言

例如

L = {am bn | m >= n}

我得到的是:

So -> a | aSo | aS1 | e
S1 -> b | bS1 | e

但我觉得这方面是错误的,因为有一个机会的数量b的可大于a的。

Answer 1:

如何写CFG与例的 B n

米> = N}。

语言描述:A M B n的包括a后跟b ,其中的数a相等或更然后数b

例A的字符串一些: {^, a, aa, aab, aabb, aaaab, ab......}

因此,总有一个a的一个b ,但额外的a是可能的。 感染字符串可以包括a而已。 还要注意^ null是语言中的一员,因为在^ NumberOf(a) = NumberOf(b) = 0

如何编写接受由线形成一个M B n中的语言语法?

在语法,应该有规则,例如,如果您添加b符号,也添加a符号。

这可以像做:

   S --> aSb 

但是,这是不完整的,因为我们需要一个规则来产生额外的a S:

   A --> aA | a

结合两个生产规则到一个单一的语法CFG。

   S --> aSb | A
   A --> aA  | a

所以,你可以生成包含任何字符串aab在(A M B N)模式。

但是,在上述的语法是没有办法产生^字符串。

因此,改变这种语法是这样的:

   S --> B   | ^
   B --> aBb | A
   A --> aA  | a

米> = N}语言。

:生成^空字符串,我通过添加附加语法额外的第一步S--> B | ^ S--> B | ^ ,所以,你可以添加^或您的符号串ab 。 ( 现在B起到作用S从以前的语法,以产生相等数目ab

编辑:感谢@Andy海登
米> = N}:

   S --> aSb | A
   A --> aA | ^

声明:此A --> aA | ^ A --> aA | ^可以产生零个或任何数量的a 。 这应该是最好我的语法,因为它产生了相同的字符串较小的解析树。
在更小的高度优选的,因为有效地解析

以下提示可能会有所帮助编写语法的正式语言:

  • 你要清楚的语言,它描述了(意/模式)。
  • 你可以记住一些基本问题的解决方案(的想法是,你可以写新的语法)。
  • 就像你可以写基本的语言规则, 我已经在这个例子中写右键线性Grammmar书面RE 。 该规则将帮助你编写语法对新语言。
  • 一种不同的方法是先画自动机 ,然后转换成自动机语法。 我们有预定义的技术从任何一类形式语言编写的自动语法。
  • 就像一个好的程序员谁通过阅读别人的代码获悉,同样可以学会写正式的语言语法。

另外你写的语法是错误的。



Answer 2:

要创建下列语言的语法

    L= {an bm | m>=n }

这意味着“B”的数量应该大于或等于则“一”的数量,或者你可以说,每一个“B”可能有至多一个“A”。 周围没有其他办法。

这里是语法此语言

      S-> aSb | Sb | b | ab

在该语法用于每个“A”有一个“B”。 而是可以在不产生任何“一个”来生成湾

你也可以尝试以下语言:

           L1= {an bm | m > n }
           L2= {an bm | m >= 2n }
           L3= {an bm | 2m >= n }
           L4= {an bm | m != n }

我给语法为每种语言。

为L1

         S-> aSb | Sb | b

对于L2

         S-> aSbb | Sb | abb

对于L3

         S-> AASb | Sb | aab | ab | b

为L4

        S-> S1 | S2
        S1-> aS1b | S1b | b
        S2-> aS2b | aS2 | a


Answer 3:

至少变量:S - >一个S B | 一个S | Ë



Answer 4:

用更少的变量:

的S - >一个S B | 一个S | AB | Ë



文章来源: Tips for creating “Context Free Grammar”