[英]Constructing a CFG
我从字面上找不到答案:
L = {vw | {a,b)的v元素,{ b,c}的w元素,a的数量<= c的数量}
V-> aV | bV | Ë
W-> bW | 连续 Ë
但是我想不出如何将v和w两个词的构造相互结合起来,并牢记上述限制。任何人都可以伸出援手吗?
正如我在回答cfg的提示中所解释的那样,正确的方法是首先理解语言中所有可能的字符串模式,然后编写规则。
L是什么语言? 使用语言L的字符串:
1.所有'a'
都在任何'c'
之前
2.数'a'
小于或等于的数'c'
,所以在升语法,如果产生式规则增加了一个符号'a'
那么它也必须添加一个或多个'c'
。
3.符号'b'
出现没有限制,它可以出现在任意位置多次。 4.空(空)字符串也属于L,因为'a'
=数字(如果'c'
== 0)。出于同样的原因,字符串仅包含符号'b'
也是可以接受的。
5.任何没有'a'
字符串也属于L(换句话说(c + b)*
是L的子集)。
现在编写语法规则很容易(阅读注释以了解每个生产规则):
S → BaBSBCB | ^ // add `a` add `C` also, B can be any where so added B
Z → CZ | BZ | ^ // to create `(c + b)*`
C → cC | c // C always generates one or more `c`s
B → bB | ^ // there is no restriction on B it generates `b`s or ^
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.