我是新来的CFG的,
有人可以给我的提示创建CFG产生一些语言
例如
L = {am bn | m >= n}
我得到的是:
So -> a | aSo | aS1 | e
S1 -> b | bS1 | e
但我觉得这方面是错误的,因为有一个机会的数量b
的可大于a
的。
我是新来的CFG的,
有人可以给我的提示创建CFG产生一些语言
例如
L = {am bn | m >= n}
我得到的是:
So -> a | aSo | aS1 | e
S1 -> b | bS1 | e
但我觉得这方面是错误的,因为有一个机会的数量b
的可大于a
的。
米> = 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
所以,你可以生成包含任何字符串a
还a
和b
在(A M B N)模式。
但是,在上述的语法是没有办法产生^
字符串。
因此,改变这种语法是这样的:
S --> B | ^
B --> aBb | A
A --> aA | a
米> = N}语言。
注 :生成^
空字符串,我通过添加附加语法额外的第一步S--> B | ^
S--> B | ^
,所以,你可以添加^
或您的符号串a
和b
。 ( 现在B
起到作用S
从以前的语法,以产生相等数目a
和b
)
编辑:感谢@Andy海登
米> = N}:
S --> aSb | A
A --> aA | ^
声明:此A --> aA | ^
A --> aA | ^
可以产生零个或任何数量的a
。 这应该是最好我的语法,因为它产生了相同的字符串较小的解析树。
( 在更小的高度优选的,因为有效地解析 )
以下提示可能会有所帮助编写语法的正式语言:
- 你要清楚的语言,它描述了(意/模式)。
- 你可以记住一些基本问题的解决方案(的想法是,你可以写新的语法)。
- 就像你可以写基本的语言规则, 我已经在这个例子中写右键线性Grammmar书面RE 。 该规则将帮助你编写语法对新语言。
- 一种不同的方法是先画自动机 ,然后转换成自动机语法。 我们有预定义的技术从任何一类形式语言编写的自动语法。
- 就像一个好的程序员谁通过阅读别人的代码获悉,同样可以学会写正式的语言语法。
另外你写的语法是错误的。
要创建下列语言的语法
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
至少变量:S - >一个S B | 一个S | Ë
用更少的变量:
的S - >一个S B | 一个S | AB | Ë