Ho spostato questa domanda da StackOverflow dove ID non ha ottenuto risposte. Abbiamo avuto una domanda simile se JSON è regolare :
JSON e XML sono entrambi spesso chiamati come linguaggi senza contesto - entrambi sono specificati principalmente da una grammatica formale in EBNF. Tuttavia, questo vale solo per JSON come definito in RFC 4329, sezione 2.2, che non richiede l'univocità delle chiavi dell'oggetto (molti potrebbero non sapere ma {"a": 1, "a": 2} è JSON valido!). Ma se hai bisogno di chiavi univoche in JSON o nomi di attributi univoci in XML, questo non può essere espresso da una grammatica senza contesto. Ma qual è la classe di linguaggio di JSON con chiavi univoche e per XML ben formato (che implica nomi di attributi univoci?).
Uno dei migliori articoli che ho trovato su questo argomento (Murato et al, 2001: Tassonomia dei linguaggi di schemi XML usando la teoria del linguaggio formale ) esclude esplicitamente vincoli di integrità come chiavi / keyrif e unicità da controllare su un livello aggiuntivo. Inoltre, il sottoinsieme di XML definito da uno schema XML o da un DTD è privo di contesto. Ma non l'intero set di tutti i documenti XML ben formati.
Penso che un automa dello stack nidificato (= linguaggio indicizzato) dovrebbe essere in grado di analizzare JSON con un vincolo chiave univoco. Per XML puoi semplificare la domanda alla lingua S di tutti gli elenchi separati da virgole di numeri interi univoci. Qualcuno ne sa di più, preferibilmente con citazioni?
PS: un semplice algoritmo per decidere le lingue (oltre alla parte senza contesto) si basa su un buon algoritmo di ordinamento. Pertanto dovrebbe essere decidibile in "tempo linearitmico" con il caso peggiore O (n log n). Non ho ancora scoperto se la classe di complessità sia, ad esempio, "leggermente sensibile al contesto" o "indicizzata", ma probabilmente qualcosa tra il contesto libero e il contesto sensibile (?).
EDIT: forse avrei meglio riformulare la domanda per i più teorici informatici. Data la classe CFL di tutte le lingue che possono essere espresse da Backus-Naur-Form con ripetizione ( ). Ora, cosa guadagno in potenza computazionale se introduco un operatore di "ripetizione con istanze uniche" , quindi una sequenza in cui ciascun elemento si traduce in una diversa sequenza di terminali?x := a+
x := a | x a
^
a^
a