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?
risposta
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 per "Prima piuttosto che dopo" – Mawg
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.
- 1. Generatore di parser/parser combinato
- 2. Quando utilizzare parser-generator, quando è sufficiente la regex?
- 3. Generatore di parser JSON in .NET/WPF?
- 4. Generatore di parser di espressioni regolari
- 5. Quale generatore di parser utilizza CPython?
- 6. "Token previsto" utilizzando il generatore di parser di limone
- 7. python: esiste un parser XML implementato come generatore?
- 8. Quando dovrei usare un parser?
- 9. Problema di implementazione del generatore di parser LALR
- 10. Scala: URL con parser di query e generatore DSL
- 11. Il generatore di parser ANTLR è il migliore per un'applicazione C++ con memoria vincolata?
- 12. Uso pratico di `foldl`
- 13. Qual è l'effetto pratico di viewPager.setOffscreenPageLimit (3) ;?
- 14. C# Tupla - Che cosa è un uso pratico di Tuple
- 15. python: quando posso decomprimere un generatore?
- 16. Tentativo di utilizzare HPSG PET Parser
- 17. Come utilizzare il parser Stanford
- 18. Quando utilizzare un modulo e quando utilizzare una classe
- 19. Uso pratico di Android XmlResourceParser?
- 20. Dove è un buon Parser degli indirizzi
- 21. Come implementare un pratico schedulatore di fibre?
- 22. Utilizzo pratico efficiente di IBOutletColletion
- 23. Qual è l'uso pratico dell'eredità protetta?
- 24. C++ qual è il vantaggio di lex e bisonte per un tokenizzatore self-parser/parser
- 25. Esiste un modo pratico per utilizzare il tipo di dati hierarchyID nell'entità framework 4?
- 26. Come posso utilizzare body parser con LoopBack?
- 27. Viene utilizzato un esempio pratico di LockSupport e AbstractQueuedSynchronizer?
- 28. Quando è opportuno utilizzare l'FTP?
- 29. Quando utilizzare un Eventstore
- 30. Scrittura di un parser semplice
Ouch. Bella astuzia da parte di Adobe per ottenere più di quanto (probabilmente) pagato. ;) "Gnu-flex" sarebbe un tag migliore? – spender
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
Antlr è la strada da percorrere, soprattutto per il gui AntlrWorks che aiuta davvero a eseguire il debug della grammatica e della sintassi. – Mawg