[英]Writing GNF grammar for a CFL
您好我想问你这个问题。
我应该用Greibach Normal Form计算(手动)语法,生成语言
L = {a i b j c k | i + j = 2k and k >= 1}
我真的不知道。 有人可以帮帮我吗?
提前致谢
CHRISS
上下文免费语法CFG为您的语言L a = {a i b j c k | i + j = 2k and k >= 1}
L a = {a i b j c k | i + j = 2k and k >= 1}
。
以下是语言L = {a i b j c k | i + j = k and k >= 1}
答案 L = {a i b j c k | 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中的注释有n个产品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
我写错了语法,我会更新语言L a
答案
编辑
L a = {a i b j c k | i + j = 2k and k >= 1}
L a = {a i b j c k | i + j = 2k and k >= 1}
。
CFA for L a :
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
关于以下答案回答CFG La = {ai bj ck | i + j = k and k >= 1}
La = {ai bj ck | i + j = k and k >= 1}
是错误的
您的简化CFG:
S --> aAc | bBc | ac | bc . A --> aAc | bBc . B --> bBc | bc .
因为上面的语言L = {ai bj ck | i + j = k and k >= 1}
L = {ai bj ck | i + j = k and k >= 1}
生成语言aabccc
但您的Simplified CFG不生成它。
对,CFG是
简化的CFG
S --> aAc | bBc | ac | bc A --> aAc | bBc | bc | ac B --> bBc | bc
纠正它,第二语言有同样的问题。
谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.