了解CFG的基础知识
understanding basics of CFG
刚开始看Sipser书中关于CFL的那一章,基础知识还没看懂。
假设这是某种语言的语法:
S -> A0A
A -> 00A | 11A | 10A | 01A | e
我对A0A这个部分真的很困惑。这是否意味着从 0 开始的左侧应该始终与右侧相同。这是否意味着 00011 或 000 不是这种语言?
Any S
是任何 A
的任何选项,后跟单个文字 0
,然后是 A
的另一个选项。每个 A
都是独立的。
字符串 00011
是语言,因为您可以选择两个 A
(例如),第一个是 00A
,第二个是 11A
。如果您递归地为两个 "remaining" A
选择空字符串 (e
),当您连接所有内容时,您将得到字符串 00011
.
你可以做类似的事情来获取字符串000
。
A 转换为空,或两个二进制数字然后 A。这意味着 A 转换为任意偶数个二进制数字的序列。
S先转化为A,再转化为0,再转化为A。也就是说,S转化为偶数位二进制数,再转化为0,再转化为偶数位二进制数。即S是中间为0的任意奇数二进制数序列
Does it mean that the left hand side from 0 should be always the same as the right hands side.
没有,为什么?两个不同的A可以转换成不同的序列。
刚开始看Sipser书中关于CFL的那一章,基础知识还没看懂。
假设这是某种语言的语法:
S -> A0A
A -> 00A | 11A | 10A | 01A | e
我对A0A这个部分真的很困惑。这是否意味着从 0 开始的左侧应该始终与右侧相同。这是否意味着 00011 或 000 不是这种语言?
Any S
是任何 A
的任何选项,后跟单个文字 0
,然后是 A
的另一个选项。每个 A
都是独立的。
字符串 00011
是语言,因为您可以选择两个 A
(例如),第一个是 00A
,第二个是 11A
。如果您递归地为两个 "remaining" A
选择空字符串 (e
),当您连接所有内容时,您将得到字符串 00011
.
你可以做类似的事情来获取字符串000
。
A 转换为空,或两个二进制数字然后 A。这意味着 A 转换为任意偶数个二进制数字的序列。
S先转化为A,再转化为0,再转化为A。也就是说,S转化为偶数位二进制数,再转化为0,再转化为偶数位二进制数。即S是中间为0的任意奇数二进制数序列
Does it mean that the left hand side from 0 should be always the same as the right hands side.
没有,为什么?两个不同的A可以转换成不同的序列。