刚刚开始在 Sipser 的书中关于 CFL 的章节,并且已经无法理解基础知识。
假设这是某种语言的语法:
S -> A0A
A -> 00A | 11A | 10A | 01A | e
我真的对这个 A0A 部分感到困惑。这是否意味着从 0 开始的左侧应该始终与右侧相同。这是否意味着 00011 或 000 不是这种语言?
刚刚开始在 Sipser 的书中关于 CFL 的章节,并且已经无法理解基础知识。
假设这是某种语言的语法:
S -> A0A
A -> 00A | 11A | 10A | 01A | e
我真的对这个 A0A 部分感到困惑。这是否意味着从 0 开始的左侧应该始终与右侧相同。这是否意味着 00011 或 000 不是这种语言?
AnyS
是您对 any 的任何选项A
,后跟单个文字0
,然后是A
. 每个A
都是独立的。
该字符串00011
在语言中,因为您可以选择两个A
s(例如),使第一个是00A
,第二个是11A
。如果你递归地e
为两个“remaining”选择空字符串()A
,当你连接所有东西时,你最终会得到字符串00011
。
您可以执行类似的操作来获取字符串000
。
A 转换为空或两个二进制数字然后 A。这意味着 A 转换为任何偶数二进制数字序列。
S 转换为 A,然后是 0,然后是 A。这意味着 S 转换为偶数个二进制数字,然后是 0,然后是偶数个二进制数字。也就是说,S 是任意奇数个二进制数字的序列,中间为 0。
这是否意味着从 0 开始的左侧应该始终与右侧相同。
没有为什么?两个不同的 A 可以转换为不同的序列。