Una struttura dati per analizzare e stringificare

2

Puoi creare una struttura di dati come Grammatica di espressione di analisi (PEG) che verrà utilizzata per analizzare :

string -> object

Puoi quindi scrivere una funzione che itera attraverso le proprietà dell'oggetto e serializza nuovamente in una stringa, o stringify :

object -> string

Non ho visto nessuna struttura dati per definire come funzionerebbe la stringa (simile a un PEG), ma penso che sarebbe possibile.

Quello che mi chiedo è se puoi creare una una struttura dati per fare entrambe le cose. Cioè, definisci una grammatica o qualcosa che ti consenta di analizzare e serializzare del testo. Ci sarebbero ancora due funzioni (parse e stringify), ma entrambi prenderebbero la stessa struttura dati / cosa della grammatica per capire cosa fare automaticamente.

Te lo chiedo perché mi sento come se avessi letto prima che l'intero scopo originale delle grammatiche fosse per la generazione del linguaggio piuttosto che l'analisi, e l'analisi veniva solo dopo. Posso immaginare una struttura dati per generare stringhe, ma mi chiedo se può essere più finemente personalizzata in modo che tu possa dargli una struttura dati (ad esempio analizzata oggetto URL ), e genererebbe la stringa URL da esso senza dover scrivere il codice di serializzazione personalizzato . La struttura dati / cosa della grammatica farebbe la stringificazione per te. Ti chiedi se è possibile.

O forse è solo meglio avere due strutture dati. Sto solo cercando di pensare in termini di riduzione della duplicazione.

    
posta Lance Pollard 24.05.2018 - 04:39
fonte

1 risposta

3

... that will be used to parse: string -> object

Em, no. L'output di un parser non è un "oggetto arbitrario". È albero di analisi (e un valore booleano che indica se la stringa di input corrisponde o meno alla grammatica fornita).

I haven't seen any data structures for defining how stringifying would work (similar to a PEG), but I think this would be possible.

Questo perché non è necessaria la struttura dati per stringificare un albero di analisi (tranne l'albero stesso). Basta fare un primo attraversamento dell'albero in ordine e concatenare la rappresentazione in serie dei nodi, che dovrebbe risultare nella stessa stringa con cui hai iniziato (supponendo che il parser non abbia inghiottito caratteri come gli spazi bianchi dall'albero).

    
risposta data 24.05.2018 - 08:30
fonte

Leggi altre domande sui tag