Me mudé a esta pregunta desde StackOverflow donde id obtuvo ninguna respuesta. Tuvimos una pregunta similar si JSON es regular :
JSON y XML son llamados frecuentemente para ser lenguajes libres de contexto; ambos se especifican principalmente por una gramática formal en EBNF. Sin embargo, esto solo es cierto para JSON como se define en RFC 4329, sección 2.2, que no requiere la unicidad de las claves de objeto (muchos pueden no saberlo, pero {"a": 1, "a": 2} es JSON válido). Pero si necesita claves únicas en JSON o nombres de atributos únicos en XML, esto no puede expresarse mediante gramáticas libres de contexto. Pero, ¿cuál es la clase de lenguaje de JSON con claves únicas y para XML bien formado (que implica nombres de atributo únicos?).
Uno de los mejores trabajos que encontré sobre este tema (Murato et al, 2001: Taxonomía de los lenguajes de esquema XML usando la teoría del lenguaje formal ) excluye explícitamente las restricciones de integridad, como las claves / keyrefs y la unicidad para verificar en una capa adicional. Además de esto, el subconjunto de XML definido por un Esquema XML o por un DTD no tiene contexto. Pero no el conjunto completo de todos los documentos XML bien formados.
Creo que un autómata de pila anidada (= lenguaje indexado) debería poder analizar JSON con una restricción de clave única. Para XML puede simplificar la pregunta al lenguaje S de todas las listas separadas por comas de enteros únicos. ¿Alguien sabe más, preferiblemente con citas?
PD: un algoritmo simple para decidir los idiomas (además de la parte sin contexto) se basa en un buen algoritmo de clasificación. Por lo tanto, debe ser decidible en "tiempo linealitmico" con O (n log n) en el peor de los casos. Todavía no he descubierto si la clase de complejidad es, por ejemplo, "ligeramente sensible al contexto" o "indexada", pero probablemente algo entre libre de contexto y sensible al contexto (?).
x := a+
x := a | x a
^
a^
a
fuente
Respuestas:
Al usar BNF con su operador de repetición única,
x := S^
dice que anx
es una instanciaa
de símboloS
, opcionalmente seguida por una instanciab
de conjuntoS - a
, opcionalmente seguida por una instanciac
de conjuntoS - a - b
, y así sucesivamente. Si|S|
es el número posibleS
y es finito, entonces2 ^ |S|! - 1
es el número posibleS^
.No es realmente significativo hablar en términos del poder computacional del lenguaje que se describe, ya que se trata de semántica estática, en el crepúsculo entre la sintaxis y la semántica ordinaria (dinámica). El poder expresivo de la gramática se extiende, ya que tiene un medio formal de expresar un tipo particular de adaptación de entrada.
Específicamente, proporciona un medio para aceptar una permutación de un subconjunto de un conjunto particular. No creo que exista ningún nombre para esta clase de lenguaje. Ciertamente no está libre de contexto, pero el requisito de contexto está al menos estrictamente controlado. Si necesita un término para ello, solo acuñe uno. Sugiero que se respete el contexto para la clase de lenguajes que no pueden describirse mediante una gramática libre de contexto sin información adicional incorporada sobre restricciones semánticas estáticas, que para ser justos son vagamente sintácticos en espíritu.
La aplicación más útil de esta extensión en particular es probablemente la capacidad de introducir restricciones de clave única, pero también le permite describir conjuntos tan interesantes como
x := [0-7]^
, que coinciden con cualquier número octal de 8 o menos dígitos no repetidos. En cuanto a la complejidad del mismo, determinar si se ha visto un elemento del conjunto no es peor que logarítmico, y la frecuencia de verificación es lineal en el número de elementos coincidentes, por lo que el^
operador es realmente decidible en el peor de los casos el tiempo linealítico.fuente
S^
dondeS
hay algunas CFL puede no tener contexto porque las CFL no están cerradas bajo la diferencia. Debería ser factible siS
es un lenguaje regular, pero desafortunadamente no puede decidir si un CFL determinado es regular. Tal vez plantearé otra pregunta ya que esto está más allá de las restricciones de JSON y XML.