Nel mio continuo sforzo di estinguere la mia sete immatura per una maggiore conoscenza di programmazione, mi è venuta l'idea di tentare di scrivere un (almeno per ora) linguaggio di programmazione semplice che compaia in bytecode. Il problema è che non conosco la prima cosa sulla progettazione della lingua. Qualcuno ha qualche consiglio su una metodologia per costruire un parser e quali dovrebbero essere le caratteristiche di base di ogni lingua? Quale lettura consiglieresti per il design della lingua? Per quanto alto livello dovrei sparare? È irrealistico sperare di poter includere una funzionalità per consentire a un bytecode in linea in un modo simile a gcc che consente l'assemblatore in linea? Vedere principalmente il codice in C e Java che sarebbe meglio per la scrittura del compilatore?Metodologie per la progettazione di un linguaggio di programmazione semplice
risposta
Ci sono tanti modi ...
Si potrebbe guardare in lingue di stack e indietro. Non è molto utile quando si tratta di progettare altre lingue, ma è qualcosa che può essere fatto molto rapidamente.
Si potrebbe esaminare le lingue funzionali. Molti di questi sono basati su alcuni concetti semplici e hanno un semplice parsing. E, tuttavia, sono molto potenti.
E, quindi, le lingue tradizionali. Sono i più difficili. Avrai bisogno di conoscere gli analizzatori lessicali, i parser, le grammatiche LALR, grammatiche LL, EBNF e lingue regolari solo per superare l'analisi.
Targeting di un bytecode non è solo una buona idea: fare altrimenti è semplicemente folle, e per lo più inutile, in un esercizio di apprendimento.
Fatevi un favore e cercate libri ed esercitazioni sui compilatori.
O C o Java. Java probabilmente ha un vantaggio, poiché l'orientamento dell'oggetto è una buona corrispondenza per questo tipo di attività. La mia raccomandazione personale è Scala. È un buon linguaggio per fare questo tipo di cose e ti insegnerà cose interessanti sulla progettazione della lingua lungo la strada.
* "Il targeting di un bytecode non è semplicemente una buona idea" * Al contrario mirare a una macchina reale (esx86), scrivendo un interprete o qualcos'altro? A proposito, scrivere un compilatore che abbia come target anche una macchina virtuale "ideale" (al contrario di una CPU in cui devi preoccuparti dell'assegnazione dei registri et al.) Tende ad essere molto più difficile della scrittura di un interprete? Immagino che si possa rendere la compilazione abbastanza semplice compilando un albero invece di una stringa di byte piatta, ma non l'ho mai fatto prima, e mi piacerebbe sapere cosa gli altri hanno da dire al riguardo. –
@Joey Contrariamente al targeting di una macchina reale, in effetti. Anche i compilatori che generano codice macchina generano spesso un output bytecode intermedio (sebbene i compilatori di fascia alta possano evitare di farlo per ottenere i massimi guadagni in termini di velocità di compilazione e ottimizzazioni disponibili). Scrivere un interprete è più facile, anzi, soprattutto se si sceglie di scrivere un linguaggio dinamico. Per quanto riguarda la compilazione in un albero, un albero è il _output_ di parsing, quindi è decisamente più semplice, anche se non proprio così tanto. –
Oops, mi sono confuso dalla tua frase (sembrava che tu avessi detto che il bytecode di destinazione è folle e inutile, ma hai detto il contrario). Inoltre, stavo parlando più lungo le linee di un albero sintonizzato per l'esecuzione, distinto dall'output del parser di base (sebbene in impostazioni semplici, potrebbero essere praticamente la stessa struttura). –
Prima è possibile leggere a book on compilers.
Per capire realmente cosa sta succedendo, è probabile che tu voglia di scrivere il codice in C.
Java non sarebbe una cattiva scelta se si voleva scrivere un linguaggio interpretato, come ad esempio Jython. Ma dal momento che suona come si desidera compilare fino a codice macchina, potrebbe essere più facile in C.
vi consiglio di leggere i seguenti libri:
Questo vi darà strumenti e tecniche per la creazione di parser, lexer e compilatori per le lingue personalizzate.
- 1. Metodologie di programmazione Excel
- 2. Come andresti a scrivere un semplice linguaggio di programmazione?
- 3. Come implementare un linguaggio di programmazione semplice basato su stack
- 4. Piattaforma per la creazione di un linguaggio di programmazione visuale
- 5. Modelli di progettazione per la programmazione simultanea?
- 6. Progettazione di un compito per la programmazione del multithreading
- 7. Quali sono alcune metodologie di programmazione per sviluppatori solisti?
- 8. Linguaggio di programmazione misterioso
- 9. Come creare un linguaggio di programmazione .Net?
- 10. Creare un linguaggio di programmazione con C#
- 11. Driver PostgreSQL per linguaggio di programmazione Go
- 12. Come implementeresti un linguaggio di programmazione funzionale?
- 13. UML è un linguaggio di programmazione?
- 14. Agda come linguaggio di programmazione
- 15. miglior linguaggio di strumento/programmazione per la visualizzazione dei dati
- 16. Vale la pena esaminare MPS (un linguaggio di meta-programmazione)?
- 17. Programmazione linguaggio assembly di Windows
- 18. . Linguaggio .NET per programmazione simultanea
- 19. Quale linguaggio di programmazione funzionale dovrei scegliere come primo linguaggio di programmazione funzionale?
- 20. Opinione per un linguaggio di programmazione adatto per il cervello di un robot di rete neurale?
- 21. tutorial o introduzioni per scrivere un semplice linguaggio di scripting?
- 22. Il linguaggio procedurale ha schemi di progettazione?
- 23. Qual è il linguaggio di programmazione funzionale più semplice per chi ha esperienza in lingue imperative?
- 24. Quale linguaggio di programmazione ha la quantità minima di sintassi?
- 25. libreria di algebra lineare per il linguaggio di programmazione D
- 26. Linguaggio di programmazione di alto livello per composizione musicale
- 27. Esiste un linguaggio specifico per la programmazione di componenti di entità?
- 28. Fogli di calcolo che utilizzano un linguaggio di programmazione funzionale
- 29. benefici ed usi di un linguaggio di programmazione funzionale
- 30. Come progettare un linguaggio di programmazione adattato agli strumenti finanziari?
Dupe di http://stackoverflow.com/questions/479013/requirements-for-compiler-design/479048 tra molti altri. Inoltre, stai facendo troppe domande: una alla volta è una buona regola. –
E questo http://stackoverflow.com/questions/1669/learning-to-write-a-compiler è la risposta SO definitiva sull'argomento. –
ok Mi dispiace, non ho visto che era un duplicato dovrebbe essere chiuso come duplicato o devo cancellare la domanda? –