È possibile costruire il mio interprete che potrebbe essere trasformato in un compilatore? Se sì, come faccio a costruirlo?Costruire il proprio interprete che può funzionare come compilatore
risposta
Questo è chiamato Second Proiezione Futamura. È stato descritto per la prima volta da Prof. Yoshihiko Futamura nel suo documento del 1971 Partial Evaluation of Computation Process – An approach to a Compiler-Compiler (Japanese), un numero English version di cui è stato ripubblicato 28 anni dopo.
Utilizza Partial Evaluation, valutando parzialmente lo stesso valutatore parziale rispetto all'interprete, ottenendo così un compilatore.
Quindi, sono necessari due ingredienti: un interprete per la lingua di destinazione, scritto in una lingua ospite (che può o non può essere uguale alla lingua di destinazione) e un valutatore parziale in grado di valutare sia l'interprete che se stesso, in altre parole, ha bisogno di valutare parzialmente la lingua ospite e ha bisogno di essere scritta nella lingua ospite che può valutare.
Il mio cervello sommerso dalla cultura pop legge automaticamente come * Second Futurama Projection * – kibibu
Una valutazione parziale già citata è uno dei possibili metodi (uno molto intenso dal punto di vista computazionale, ma piuttosto generico dall'altro). Un altro approccio è la metaprogrammazione: se un interprete di una lingua viene implementato in una forma di un semplice traduttore che si rivolge a un altro linguaggio interpretato, è molto facile re-targetizzarlo in seguito a un linguaggio compilato o sostituire l'interprete di destinazione con un compilatore.
@Guildenstern, grazie, rimosso un collegamento. –
Oltre alle proiezioni di Futaruma, un altro approccio è il jit di meta-traccia. Meta-tracing jit non traccia direttamente o jit i tuoi programmi, ma indirettamente, attraverso l'interprete. RPython è un ottimo framework per meta-traccia. Scrivi un interprete in una versione limitata di python e RPython lo trasforma in un compilatore jit in C.
- 1. Costruire il proprio framework php
- 2. Differenza esatta tra compilatore e interprete?
- 3. Il compilatore compilerà solo il codice che può essere eseguito?
- 4. Qual è il miglior interprete o compilatore Scheme?
- 5. Alternativa a jquery live che può funzionare
- 6. Compilare il proprio compilatore C# utilizzando ANTLR: Compilation Unit
- 7. Interprete AST?
- 8. Esiste un compilatore/interprete per eseguire codice per php 5.3?
- 9. Come può forse Build.VERSION_CODES funzionare?
- 10. Come può un modulo perl trovare il proprio percorso?
- 11. Programma Clojure che legge il proprio MANIFEST.MF
- 12. Errore di riferimento ambiguo spuri nel compilatore/interprete Scala 2.7.7?
- 13. Come può un programma cancellare il proprio eseguibile
- 14. Qualsiasi compilatore/interprete bytecode non codec C/C++?
- 15. Creazione di un compilatore o di un interprete utilizzando Python
- 16. Compilatore/interprete BCPL per un sistema operativo e un'architettura attuali?
- 17. Googles GOLANG è un interprete o un compilatore?
- 18. L'SDK Android può funzionare con JDK 1.7?
- 19. Interprete e interprete di porte seriali Linux?
- 20. Che cosa può far continuare a funzionare Java dopo System.exit()?
- 21. Perché Rails non può funzionare con mod_ruby?
- 22. una funzione actionscript può scoprire il proprio nome?
- 23. Come implementare il proprio server WHOIS?
- 24. Un eseguibile può scoprire il proprio percorso? (Linux)
- 25. Avviso che può funzionare su iOS 7 e iOS 8
- 26. Branching che non può essere visto da compilatore
- 27. Number.isInteger (x) che è creato non può funzionare in IE
- 28. C++ come scrivere codice che il compilatore può facilmente ottimizzare per SIMD?
- 29. Un metodo cfc ColdFusion può determinare il proprio nome?
- 30. Massive può funzionare con MySql?
Potresti approfondire un po 'questo? A quale lingua ti stai riferendo? Come sarebbe "un interprete che può funzionare come compilatore" essere diverso da un compilatore? – Syntactic
http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –
@Syntactic: non sarebbe diverso, questo è il punto. Ma non dovresti * scrivere * un compilatore. Ad esempio, il progetto PyPy lo usa. Devi solo scrivere un interprete semplice e diretto per la tua lingua e il framework PyPy genera automaticamente un compilatore JIT di codice nativo per te. –