您好我想问你这个问题。
我应该用Greibach Normal Form计算(手动)语法,生成语言
L = {ai bj ck | i + j = 2k and k >= 1}
我真的不知道。有人可以帮帮我吗?
提前致谢
CHRISS
答案 0 :(得分:1)
针对您的语言La = {ai bj ck | i + j = 2k and k >= 1}
的上下文免费语法CFG。
以下是语言L = {ai bj ck | i + j = k and k >= 1}
的答案。
<强> CFG:强>
S --> aAc | bBc |
A --> aAc | B | ^
B --> bBc | ^
什么是GNF?
CFG的一个重要形式是Greibach Normal Form GNF:
A --> aα
Where α ∈ V* (any number of variables including zero)
注意: nul ^
不能是任何生产接受起始符号S
的RHS上的符号,并且如果S --> ^
是生产的话,则会限制语法然后S
不能出现在任何其他语法生成的RHS上。
任何CFG都可以用GNF格式编写。
如何在GNF中转换CFG?
CFG中的注释我上面写的是nul作品A --> ^
和B --> ^
以及单位作品A --> B
。 GNF形式不允许单位制作和零制作。尽管其他作品可以通过在语法中引入GNF制作而容易地以GNF形式书写,例如S --> aAc
可以重写为S --> aAC and C --> c
。
下面我将重写相当于语言的CFG并删除名为简化CFG的零和单元制作。
简化CFG:
S --> aAc | bBc | ac | bc
A --> aAc | bBc
B --> bBc | bc
现在,通过引入新的GNF生成C --> c
并在其他生产规则中将c
替换为C
,可以轻松地将此语法转换为GNF形式。
语言L的GFN
S --> aAC | bBC | aC | bC
A --> aAC | bBC
B --> bBC | bC
C --> c
我错误地写了一个错误的语法,我将更新语言La
的答案
修改
La = {ai bj ck | i + j = 2k and k >= 1}
。
关于L a 的CFG:
S --> aaAc | bbBc | abBc
A --> aaAc | B | abBc | ^
B --> bbBc | ^
简化CFG:
S --> aaAc | bbBc | abBc | aac | bbc | abc
A --> aaAc | bbBc | abBc | aac | abc
B --> bbBc | bbc
GFN代表语言L a :
添加三个新的制作规则:X --> a
,Y --> b
和Z --> c
。
更改程序员并按变量替换终端:
S --> aXAZ | bYBZ | aYBZ | aAZ | bYZ | aYZ
A --> aXAZ | bYBZ | aYBZ | aXZ | aYZ
B --> bYBZ | bYZ
X --> a
Y --> b
Z --> c
答案 1 :(得分:1)
关于以下答案La = {ai bj ck | i + j = k and k >= 1}
的CFG错误
您的简化CFG:
S --> aAc | bBc | ac | bc .
A --> aAc | bBc .
B --> bBc | bc .
由于上述语言L = {ai bj ck | i + j = k and k >= 1}
生成语言aabccc
,但您的简化CFG不会生成语言。
正确的CFG
简化CFG
S --> aAc | bBc | ac | bc
A --> aAc | bBc | bc | ac
B --> bBc | bc
纠正它,第二语言有同样的问题。
谢谢!