Sto cercando una piccola guida. Fino a stamattina, questo era tutto sulla mia testa. Dopo aver passato oggi ricerche su Wikipedia, StackOverflow, ecc., Direi che ho il naso fuori dall'acqua. Ho il compito di ricercare un progetto che, a quanto ho capito, implicherebbe il reverse engineering di un linguaggio specifico del dominio che è fondamentalmente un tipo di sintassi di espressioni regolari e che lo traduce in espressioni regolari convenzionali (nel senso di Perl). Spero che qualcuno possa colmare le lacune nella mia comprensione, quindi lascia che ti spieghi quello che ho e la mia comprensione, finora.
Riguardo al DSL, ha fondamentalmente due componenti. Uno è espressioni regolari simili a grep, più o meno. L'altro componente è costituito da ciò che è possibile chiamare macro. Queste macro vengono utilizzate quando si desidera trovare numeri di previdenza sociale, numeri di carta di credito e così via nel testo analizzato. Il DSL è un modo più semplice per l'utente finale di specificare testo ed eccezioni corrispondenti. (Onestamente, è ancora piuttosto complicato da usare - ma più semplice delle espressioni regolari.)
Il DSL viene utilizzato per scrivere "regole", una regola come un'istruzione a riga singola che descrive il testo di destinazione.
Quello che voglio fare è prendere una regola come input, tradurre quella regola in un'espressione regolare convenzionale laddove possibile. Se una macro non si scompone in una singola espressione regolare, tradurrò la macro in uno o più RE o qualsiasi tipo di codice di elaborazione del testo necessario.
Il mio più grande punto di ignoranza è il "tradurre". Ecco la mia prima domanda: coinvolgerà quello che viene chiamato "parsing"? (Come puoi immaginare, sono un programmatore autodidatta.) Utilizzerei uno strumento come ANTLR o PyParsing o qualcosa del genere? (Ho appena scoperto di questi strumenti oggi, durante le mie ricerche.) Sto indovinando sì, ma apprezzerei la conferma.
Quanto devo imparare? Non ho bisogno di prendere il "libro del drago", giusto? Non sto scrivendo una DSL, ma se sono reverse-engineering, allora immagino che avrò più o meno bisogno di imparare come creare una DSL in primo luogo (dato che altrimenti avrei saputo come fare parsing). Sì?
Che cosa ho bisogno di ottenere sotto la mia cintura? Questo è quello che sto cercando di capire. Ho analizzato i file di configurazione; Ho scritto un semplice generatore di codice YAML in Java Bean; Ho scritto un semplice estrattore HTML; Conosco un po 'le espressioni regolari e l'elaborazione del testo; ma questo particolare sforzo è più sofisticato di qualsiasi altra cosa abbia fatto prima. Sembra fattibile, ma come controllo di integrità per favore dimmi se, nella mia ignoranza, ho sbagliato i calcoli e quello che sto descrivendo in realtà ha bisogno di 4 anni di essere un importante informatico da portare a termine.
Qualcuno può indicarmi la giusta direzione o darmi qualche suggerimento? Grazie.