刚刚在Sipser的书中开始了关于CFL的章节,并且已经无法理解基础知识。
让这成为某种语言的语法:
S -> A0A
A -> 00A | 11A | 10A | 01A | e
我对这个A0A部分感到很困惑。这是否意味着0的左侧应始终与右侧的侧面相同。这是否意味着00011或000不是这种语言?
答案 0 :(得分:0)
任何S
都可以选择A
,然后是单个文字0
,然后是A
的另一个选项。每个A
都是独立的。
字符串00011
使用该语言,因为您可以选择两个A
(例如),使第一个00A
,第二个11A
}。如果您为两个“剩余的”e
递归地选择空字符串(A
),那么当您连接所有内容时,您将最终使用字符串00011
。
你可以做类似的事情来获得字符串000
。
答案 1 :(得分:0)
A转换为空或两个二进制数字,然后是A.这意味着A转换为偶数个二进制数字的任何序列。
S转换为A,然后转换为0,然后转换为A.这意味着S转换为偶数个二进制数字,然后是0,然后是偶数个二进制数字。也就是说,S是奇数个二进制数字的任何序列,中间为0。
这是否意味着0的左侧应始终与右侧相同。
不,为什么?两个不同的A可以转换为不同的序列。