这个一般语法是做什么的?
S -> LR
L -> L0Y
L -> LX
X1 -> 1X
X0 -> 0X
X0 -> 1Y
Y1 -> 0Y
YR -> R
L -> epsilon
R -> epsilon
起始符号是S.我试图从这个语法生成字符串,我得到了每个二进制数字。但我认为它确实具体。
答案 0 :(得分:3)
S -> LR
L -> L0Y
L -> LX
X1 -> 1X
X0 -> 0X
X0 -> 1Y
Y1 -> 0Y
YR -> R
L -> epsilon
R -> epsilon
终端:0,1 开始:S
让我们分开语法:
S -> LR
L -> L0Y
L -> LX
这将生成L
形式的字符串,字符串X
和0Y
,R
。
X1 -> 1X
X0 -> 0X
X0 -> 1Y
Y1 -> 0Y
YR -> R
将X
和Y
视为对二进制字符串执行操作:X
将传播到右侧,然后将0
更改为1
以及随后的所有内容1
到0
s。实际上,单个X
会增加二进制数而不会更改其字符串长度(或卡住)。
前导Y
会将所有1
的字符串重写为所有0
(或卡住)。
将L
的规则视为字符串右侧可能的操作。 L => L0Y
会将字符串从全1重置为全零,并将其长度增加1。 L => LX
将增加任何其他数字,但如果该值为最大值则会失败。
这两个动作一起足以生成(低效率)所有0和1的字符串(包括空字符串)。
L -> epsilon
R -> epsilon
只会清理哨兵。
在四个单词中对语言进行一种可能的描述:
所有字符串的集合