创建“Context Free Grammar”的提示

时间:2013-02-28 03:20:21

标签: grammar context-free-grammar lexical-analysis formal-languages

我是CFG的新手,
有人可以给我一些关于创建生成某种语言的CFG的提示

例如

  

L = {am bn | m >= n}

我得到的是:

  

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

但我认为这个区域是错误的,因为 b 的数量可能大于 a 的。

4 个答案:

答案 0 :(得分:46)

如何编写CFG,例如 m b n

  

L = {a m b n | m> = n}。

语言描述: a m b n 包含 a ,后跟 b a 的数量等于或大于 b 的数量。

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

因此,对于一个 a 总有一个 b ,但可能会有额外的 a 。感染字符串只能由 a 组成。另请注意 ^ null是语言的成员,因为在 ^ NumberOf(a) = NumberOf(b) = 0

  

如何编写接受字符串a m b n 形成的语言的语法?

在语法中,应该有规则,如果您添加 b 符号,您还可以添加 a 符号。

这可以通过以下方式完成:

   S --> aSb 

但这不完整,因为我们需要一条规则来生成额外的a s:

   A --> aA | a

将两个制作规则合并为一个语法 CFG。

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

因此,您可以生成包含 a 以及 a b 的任何字符串in(a m b n )模式。

但是在上面的语法中,没有方式可以生成 ^ 字符串。

所以,改变这个语法:

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

这个语法可以生成{a m b n | m> = n}语言。

注意:要生成^空字符串,我添加了S--> B | ^,在语法中添加了额外的第一步,因此您可以添加^或者符号字符串 a b 。 (现在B扮演前一个语法S的角色,生成相同数量的 a b

编辑:感谢@Andy Hayden
您也可以为同一种语言编写等效语法{a m b n | m> = n}:

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

注意:此处A --> aA | ^可以生成零个或任意数量的 a 。这应该比我的语法更好,因为它为同一个字符串生成一个较小的解析树 (较小的高度,因为有效的解析

以下提示可能有助于为正式语言编写语法:

  
      
  • 你应该清楚它所描述的语言(意义/模式)。
  •   
  • 你可以记住一些基本问题的解决方案(这个想法是你可以编写新的语法)。
  •   
  • 您可以为I have written for RE in this example to write Right-Linear-Grammmar等基本语言编写规则。规则将帮助您为新语言编写语法。
  •   
  • 一种不同的方法是首先绘制自动机,然后将自动机转换为语法。我们有预定义的技术从任何一种形式语言的自动机编写语法。
  •   
  • 就像一个通过阅读他人代码来学习的优秀程序员一样,同样可以学习为正式语言编写语法。
  •   

你写的语法也错了。

答案 1 :(得分:5)

您想为后续语言

创建语法
    L= {an bm | m>=n }

这意味着' b'应该大于或等于' a' 或者你可以说每个' 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

for L2

         S-> aSbb | Sb | abb

for L3

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

表示L4

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

答案 2 :(得分:2)

最少变量:S - > a S b |一个S | ë

答案 3 :(得分:0)

变量较少:

S - > a S b |一个S | a b | ë