Come analizzare una semplice sintassi personalizzata in Go?

5

Ho una quantità limitata di tipi di input:

34:56 = sensorA#, sensorA#, sensorB#
2:5 = { led# }
66 = otherSensor
2,3,4,5 = greenRelay#, redRelay#, relayA#, relayA#
  • a: b implica intervallo.
  • {name} implica un nome globale per il set di dati.
  • # rappresenta l'enumerazione automatica nel nome (non rilevante per il domanda)
  • Valori singoli o valori separati da virgola indica ciò che ti aspetti da questo.
  • Meno nomi dei valori implicano l'assegnazione automatica del nome (non rilevante per la domanda)

Ho bisogno di estrarre i valori numerici dal lato sinistro dell'espressione e i nomi dal lato destro in modo da poter iterare per assegnare i nomi ai valori. Non so come affrontare questo compito, ho letto e ho cercato una soluzione, ma mi piacerebbe raggiungere una buona metodologia per questo caso.

Devo sostituire tutti gli spazi e le schede prima dell'elaborazione?

Dovrei usare regex solo per verificare la correttezza dell'ingresso o qualcosa di più?

Devo usare solo una semplice manipolazione delle stringhe? Sto usando Golang e le stringhe sono immutabili, la manipolazione delle stringhe implica allocazioni e molto codice (la velocità non è DAVVERO importante qui, ma mi piacerebbe trovare il modo corretto per risolverlo).

Dovrei scrivere un lexer e un parser per questo?

    
posta Lupo Dharkael 27.01.2017 - 21:20
fonte

1 risposta

2

Should I replace all the spaces and tabs before processing?

Puoi farlo se vuoi che gli spazi siano privi di significato come in c, c ++, java, c #.

Questo significa fare un doppio passaggio sul file. Per file molto grandi questo può essere proibitivo perché ti costringe a tenere tutto in memoria o creare un file temporaneo. Esistono tecniche per consumare spazi bianchi al volo. Considerali prima di ricorrere a questo.

Should I use regex just to verify the correctness of the input or for something more?

Non tutte le lingue possono essere convalidate con espressioni regolari. Assicurati di quale categoria ti trovi prima di impegnarti.

Should I use just plain string manipulation? I'm using Golang and strings are immutable, string manipulation implies allocations and a lot of code (speed is not REALLY important here but I'd like to find the correct way to solve this).

"Un sacco di codice" non è un buon modo per definire una lingua. Ecco un buon modo:

link

Should I write a lexer and parser for this?

Questo offre il massimo potere di qualsiasi cosa tu abbia menzionato. Ci sono probabilmente delle alternative più semplici centrate sul riutilizzo di parser scritti per cose come json o xml, ma poi stai solo spingendo i tuoi tipi di input in un formato di dati diverso.

    
risposta data 28.01.2017 - 17:07
fonte

Leggi altre domande sui tag