Qual classe de linguagem formal é XML e JSON com chaves exclusivas?


12

Eu mudei essa pergunta do stackoverflow onde o id não obteve respostas. Tivemos uma pergunta semelhante se o JSON é regular :

JSON e XML são freqüentemente chamados de linguagens livres de contexto - ambos são especificados principalmente por uma gramática formal no EBNF. No entanto, isso é válido apenas para JSON, conforme definido na RFC 4329, seção 2.2, que não requer exclusividade de chaves de objeto (muitos podem não saber, mas {"a": 1, "a": 2} é JSON válido!). Mas se você precisar de chaves exclusivas em JSON ou nomes de atributos exclusivos em XML, isso não poderá ser expresso por gramáticas livres de contexto. Mas qual é a classe de linguagem do JSON com chaves exclusivas e para XML bem formado (o que implica nomes de atributos exclusivos?).

Um dos melhores artigos que encontrei sobre esse assunto (Murato et al., 2001: Taxonomia das Linguagens de Esquema XML usando a Teoria da Linguagem Formal ) exclui explicitamente restrições de integridade, como chaves / referências de chave e exclusividade, a serem verificadas em uma camada adicional. Além disso, o subconjunto de XML definido por um esquema XML ou por uma DTD é livre de contexto. Mas não o conjunto completo de todos os documentos XML bem formados.

Eu acho que um autômato de pilha aninhada (= linguagem indexada) deve ser capaz de analisar o JSON com restrição de chave exclusiva. Para XML, pode simular a pergunta na linguagem S de todas as listas separadas por vírgula de números inteiros exclusivos. Alguém sabe mais, de preferência com citações?

PS: Um algoritmo simples para decidir as linguagens (além da parte livre de contexto) é baseado em um bom algoritmo de classificação. Portanto, deve ser decidido em "tempo linearitmico" com O (n log n) no pior caso. Ainda não descobri se a classe de complexidade é, por exemplo, "levemente sensível ao contexto" ou "indexada", mas provavelmente algo entre livre de contexto e sensível ao contexto (?).

Edição: Talvez seja melhor reformular a questão para os cientistas da computação mais teóricos. Dada a classe CFL de todos os idiomas que podem ser expressos por Backus-Naur-Form com repetição ( ). Agora, o que ganho em poder computacional se introduzir um operador de "repetição com instâncias únicas" , assim é uma sequência em que cada elemento resulta em uma sequência diferente de terminais?x := a+ x := a | x a^a^a


O JSON com chaves de objetos repetíveis é livre de contexto (consulte a gramática JSON), mas como você expressa a restrição de chave exclusiva em uma gramática ou autômato comum? Ou: A qual classe de complexidade pertence um analisador XML, se ele puder detectar o conjunto de todos os documentos XML bem formados (bem formado implica nomes de atributos exclusivos por elemento).
Jakob

1
Usando termos do gerador de compilador aqui. A sintaxe respectiva de JSON e XML é certamente livre de contexto. Propriedades como identificadores exclusivos ou restrições de tipo de valor são semânticas estáticas (algumas pessoas chamam essa sintaxe também, mas rejeito essa nomenclatura por vários motivos). Os geradores de analisador geralmente permitem enriquecer um analisador comum por coisas como predicados sintáticos / semânticos que não precisam ser livres de contexto. Em teoria, gramáticas atribuídas são usadas. Não sei se essas características podem ser naturalmente expressas com gramáticas formais de qualquer poder.
Raphael

1
Quais partes de uma linguagem formal vão além da sintaxe, depende do ponto de vista. Estruturas aninhadas simples como XML e JSON podem ser analisadas por um autômato de empilhamento. Eu só quero saber qual potência computável você obtém, se o autômato é enriquecido com um dicionário para verificar se um valor armazenado foi lido antes, para garantir a restrição de exclusividade. Eu acho que é uma gramática indexada (um autômato de pilha aninhada?), Mas existem vários tipos de gramáticas indexadas.
Jakob

@Jakob, eu dobrar essa discussão (abreviado) na questão então é claro exatamente o que você está pedindo
Suresh Venkat

Um LBA deve ser suficiente, pois você nunca precisará armazenar mais identificadores do que caracteres no texto. Eu não sei o suficiente sobre aulas entre CFL e CSL para ajudar aqui.
Raphael

Respostas:


6

O uso do BNF com seu operador de repetição exclusiva x := S^diz que an xé uma instância ado símbolo S, opcionalmente seguida por uma instância bdo conjunto S - a, ela própria opcionalmente seguida por uma instância cdo conjunto S - a - be assim por diante. Se |S|é o número de possíveis Se é finito, então 2 ^ |S|! - 1é o número de possíveis S^.

Não é realmente significativo falar em termos do poder computacional da linguagem que está sendo descrita, já que se trata de semântica estática, no crepúsculo entre a sintaxe e a semântica comum (dinâmica). O poder expressivo da gramática é estendido, pois possui um meio formal de expressar um tipo particular de adaptação de entrada.

Especificamente, fornece um meio de aceitar uma permutação de um subconjunto de um conjunto específico. Eu não acho que exista um nome para essa classe de linguagem. Certamente não é livre de contexto, mas o requisito de contexto é pelo menos bastante estritamente controlado. Se você precisar de um termo, basta inventar um. Sugiro respeito ao contexto para a classe de linguagens que não pode ser descrita por uma gramática livre de contexto sem informações adicionais incorporadas sobre restrições semânticas estáticas, as quais, para serem justas, são vagamente sintáticas em espírito.

A aplicação mais útil dessa extensão específica é provavelmente apenas a capacidade de introduzir restrições de chave exclusiva, mas também permite descrever conjuntos interessantes como x := [0-7]^, que correspondem a qualquer número octal de 8 ou menos dígitos não repetidos. Quanto à complexidade, determinar se um elemento do conjunto foi visto não é pior que logarítmico, e a frequência da verificação é linear no número de elementos correspondentes, de modo que o ^operador é realmente decidível no pior momento linearitêmico.


Obrigado pela resposta e pela dica para pensar nas permutações de um subconjunto. Embora o operador de repetição exclusiva não capture pares de valores-chave com chaves exclusivas, a complexidade deve ser a mesma para esses casos. No entanto, se eu começar a aplicar o operador em estruturas arbitrárias, a classe S^onde Sestão algumas CFLs pode ficar sem contexto, porque as CFLs não estão fechadas com diferença. Deveria ser possível se So idioma for regular, mas infelizmente você não pode decidir se uma determinada CFL é regular. Talvez eu levante outra questão, pois isso está além das restrições de JSON e XML.
Jakob
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.