grammar - 不受语法限制

标签 grammar

这个通用语法有什么作用?

S -> LR 
L -> L0Y 
L -> LX 
X1 -> 1X 
X0 -> 0X 
X0 -> 1Y 
Y1 -> 0Y 
YR -> R     
L  -> epsilon 
R  -> epsilon

起始符号是S。我尝试从这个语法生成字符串,并且得到了每个二进制数。但我认为它做了一些特定的事情。

最佳答案

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形式的字符串,X0Y的字符串,R

X1 -> 1X 
X0 -> 0X 
X0 -> 1Y 
Y1 -> 0Y 
YR -> R

XY视为作用于二进制字符串:X将向右传播,然后更改01 以及所有后续的 10。实际上,单个 X 会递增二进制数而不改变其字符串长度(或卡住)。

前导的 Y 会将所有 1 的字符串重写为所有 0(或卡住)。

L 的规则视为字符串右侧部分的可能操作。 L => L0Y 会将字符串从全 1 重置为全 0,并将其长度增加 1。 L => LX 将增加任何其他数字,但如果该值达到最大值则失败。

这两个操作一起足以生成(低效)所有零和一的字符串(包括空字符串)。

L  -> epsilon 
R  -> epsilon

只会清理哨兵。

用四个词对语言进行可能的描述:

所有字符串的集合

关于grammar - 不受语法限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770112/

相关文章:

javascript - 为什么 <!-- 不会抛出语法错误?

带括号的语法

kotlin - 结果一直在说: “Type mismatch: inferred type is Unit but String was expected”

c++ - 如何使用 boost.Spirit 解析带有嵌套括号的表达式?

c# - 当我咳嗽时...如何防止 SpeechRecognitionEngine 中的错误识别?

ANTLR 用于可选键值

ANTLR4 - 如何指定行不以特定字符开头?

code-generation - 从 Antlr 语法生成语法正确的句子

Antlr解析数字问题

java - 转移/减少 Java Cup 中的冲突