2010-08-04 14 views
5

Sto scrivendo un semplice linguaggio di modello di testo per un'applicazione web che sto scrivendo (si pensi al codice di google). Al termine, presenterà solo un piccolo numero di azioni possibili, cose semplici come "valutare ed eseguire", "valutare e stampare", "valutare e sfuggire html", "commentare". Stavo pensando alla scrittura manuale dell'intero parser, ma ho iniziato a guardare i generatori di parser come lex, flex e antlr. Questi sembrano molto più di quanto mi serva per la mia sintassi semplice. Quindi la domanda è, a che punto è pratico utilizzare un generatore di parser?Quando è pratico utilizzare un generatore di parser?

+3

Ouch. Bella astuzia da parte di Adobe per ottenere più di quanto (probabilmente) pagato. ;) "Gnu-flex" sarebbe un tag migliore? – spender

+0

Il libro del Pragmatic Programmer [Pattern di implementazione della lingua] (http://pragprog.com/titles/tpdsl/language-implementation-patterns) ha un eccellente primo capitolo che discute i diversi "punti di forza" dei parser per le diverse lingue. – sarnold

+0

Antlr è la strada da percorrere, soprattutto per il gui AntlrWorks che aiuta davvero a eseguire il debug della grammatica e della sintassi. – Mawg

risposta

6

Prima o poi. Se hai una sintassi semplice ora, usare un generatore di parser è facile. Rende ancora più facile quando si desidera aggiungere variabili, cicli e condizionali.

Ma aspetta! - Ci sono pochi motivi per inventare la propria lingua a meno che non sia molto specifica del dominio come eqn o TeX o linguaggi di modellazione molecolare. È molto meglio integrare una lingua specificamente progettata per lo scopo. Tcl è la vecchia guardia in quel regno, con Python essere un contendente forte. Anche Perl è stato progettato per essere un linguaggio di scripting incorporato, ma penso che sia un candidato scarso in quanto probabilmente produrrà un codice molto "di sola scrittura" nelle mani degli utenti.

Il design della lingua è difficile e il fumo di tutti i frammenti è ancora più difficile. Con Python e Tcl puoi decidere quanta parte del linguaggio di base esporre agli utenti e aprire i bit chiusi quando ne trovi la necessità.

Il primo piccolo linguaggio che ho scritto (che sorprendentemente è ancora in uso in produzione) sarebbe stato molto meglio se fosse stato lì ad usarlo.

+1

+1 per "Prima piuttosto che dopo" – Mawg

2

Da un lato se non si ha esperienza con uno di questi strumenti, e si ha il tempo, allora forse questa è una buona opportunità per imparare uno per questo caso d'uso. Immagino che se tu fossi esperto in questi strumenti, li useresti semplicemente, proprio come molti afferrano per una regex per molte attività di analisi.

D'altra parte, i parser semplici non sono così difficili da fare, non sono nemmeno così difficili da mantenere. Mi piace scriverli e in genere li raggiungo quando l'attività richiede uno piuttosto che uno strumento (ma non ho molta familiarità con gli strumenti). In molti casi preferisco un parser semplice su regex, a seconda del compito.

Problemi correlati