我把这个问题从 id没有答案的stackoverflow中移了出来。我们有一个类似的问题,JSON是否是常规的:
JSON和XML都经常被称为无上下文语言-它们都主要由EBNF中的形式语法指定。但是,这仅适用于RFC 4329第2.2节中定义的JSON ,它不需要对象键的唯一性(许多人可能不知道,但是{“ a”:1,“ a”:2}是有效的JSON!)。但是,如果您需要JSON中的唯一键或XML中的唯一属性名,则不能用上下文无关的语法来表示。但是,这是具有唯一键和格式正确的XML(这意味着唯一的属性名称)的JSON语言类。
我找到的关于该主题的最佳论文之一(Murato等,2001:“ 使用形式语言理论的XML模式语言分类法”)明确排除了完整性约束,例如键/键引用和唯一性,需要在附加层上进行检查。除此之外,由XML Schema或DTD定义的XML子集不受上下文限制。但不是所有格式良好的XML文档的全部。
我认为嵌套堆栈自动机(=索引语言)应该能够解析具有唯一键约束的JSON。对于XML,可以将问题简化为所有用逗号分隔的唯一整数列表的语言S。有谁知道更多,最好是被引用吗?
PS:一种确定语言的简单算法(与上下文无关的部分除外)基于良好的排序算法。因此,在“线性时间”下应确定为O(n log n)最坏的情况。我还没有发现复杂性类是“轻度上下文相关”还是“索引”,但可能介于上下文无关和上下文敏感之间(?)。
编辑:也许我更好地为理论性更强的计算机科学家重新提出了这个问题。给定Backus-Naur-Form可以重复(x := a+
x := a | x a
)表示的所有语言的CFL类。现在我该怎么获得计算能力,如果我介绍了“重复独特的实例”操作^
,所以a^
是一个序列a
,其中在终端的不同序列的每个元素的结果吗?