Ho un motore di scripting che ho appena pubblicato come progetto open source. È stato seduto sul mio harddrive aspettando circa un anno. Il mio motore ovviamente non è completo in alcun modo, ma funziona per script semplici. Ha un aspetto javascript-ish, ma non desidero rispettare le specifiche ECMA o altro.
Ora, la cosa importante su cui sto lavorando è migliorare la qualità del codice, lasciando il linguaggio che funziona così com'è (che ho alcuni test di regressione da "provare"). Non ha una grammatica formale e funziona così:
- preelaborazione / Tokenize. A questo punto rimuove gli spazi bianchi e taglia tutto in "token", che è fondamentalmente solo una struttura contenente una stringa e un "suggerimento" approssimativo su quale sia il token (numero, identificatore, operazione, ecc.) E alcune informazioni di debug come numero di riga
- Una classe ScriptingEngine che prende l'elenco di token e li analizza effettivamente e li esegue
- Una classe "ExpressionEvaluator" che prende un sottoinsieme dell'elenco dei token e crea un albero specifico di operazioni, valori e quindi esegue operazioni e simili e collassa l'albero in un unico valore
Il mio motore ha l'obiettivo di essere portabile (funziona ovunque .Net lo fa) e autonomo. Finora, questo "funziona", ma il codice è terribile e sono abbastanza sicuro che lo farò nel modo sbagliato.
Mi chiedo se una grammatica formale e tutto ciò che ne consegue potrebbe aiutare
Alcuni vantaggi che ho sentito di essere più formale con la grammatica
- Specifica univoca della lingua
- Più facile da mantenere / modificare
- Più tradizionale / Più grande supporto della comunità?
E alcuni degli svantaggi
- Alcune lingue possono essere molto difficili da ridurre a una grammatica formale, ad esempio Perl.
- Una curva di apprendimento per qualcuno che non è a conoscenza (cioè io)
- Generalmente si basano su strumenti come yacc e ANTLR, che introducono un altro passo nel flusso di lavoro e / o aggiungono dipendenze (che vorrei evitare)
Sebbene questo progetto sia in .Net, potrebbe ugualmente applicarsi a qualsiasi altro linguaggio di implementazione. Dovrei usare una grammatica formale? Qualcuno può espandere i pro / contro di entrambe le parti?