¿Es posible para mí construir mi propio intérprete que luego podría transformarse en un compilador? Si es así, ¿cómo hago para construirlo?Creando su propio intérprete que puede funcionar como un compilador
Respuesta
Esto se conoce como Proyección Second Futamura. Primero fue descrito por Prof. Yoshihiko Futamura en su papel 1971 Partial Evaluation of Computation Process – An approach to a Compiler-Compiler (Japanese), un English version del cual fue republicado 28 años más tarde.
Utiliza Partial Evaluation, al evaluar parcialmente el evaluador parcial en sí mismo con respecto al intérprete, obteniendo así un compilador.
Por lo tanto, necesita dos ingredientes: un intérprete para su idioma de destino, escrito en algún lenguaje de host (que puede o no ser el idioma de destino) y un evaluador parcial capaz de evaluar tanto el intérprete como él mismo, en otras palabras, necesita evaluar parcialmente el idioma del servidor y debe escribirse a sí mismo en el idioma del servidor que puede evaluar.
Mi cerebro de cultura pop confundido lo leyó automáticamente como * Segunda Proyección Futurama * – kibibu
Una evaluación parcial ya mencionada es uno de los métodos posibles (uno muy computacionalmente intensivo, pero bastante genérico en el otro lado). Otro enfoque es la metaprogramación: si un intérprete de un idioma se implementa en forma de un traductor simple que se dirige a otro idioma interpretado, es muy fácil volver a orientarlo más adelante a algún lenguaje compilado, o reemplazar el intérprete de destino por un compilador.
@Guildenstern, gracias, eliminó un enlace. –
Aparte de las proyecciones de Futaruma, otro enfoque es el meta trazado de jit. El jit de meta-rastreo no rastrea ni sobrescribe sus programas, sino indirectamente, a través del intérprete. RPython es un marco genial de meta-rastreo. Escribes un intérprete en una versión restringida de python, y RPython lo convierte en un compilador de jit en C.
- 1. Creando su propio idioma
- 2. Creando su propio uid de estilo Tinyurl
- 3. ¿Puede un método ColdFusion cfc determinar su propio nombre?
- 4. Creando su propio resaltado de sintaxis en GEdit?
- 5. Creando tu propio HRESULT?
- 6. Compilador/intérprete de Java
- 7. Este objetivo puede incluir su propio producto
- 8. Python: ¿un objeto puede ser de su propio tipo?
- 9. compilador C++ intérprete/consola/snippet
- 10. ¿Googles GOLANG es un intérprete o compilador?
- 11. Construyendo un compilador o intérprete usando Python
- 12. ¿Puede un ejecutable descubrir su propio camino? (Linux)
- 13. ¿Puede un módulo tener su propio archivo de configuración?
- 14. implementar su propio sizeof
- 15. Escribiendo mi propio compilador C++
- 16. compilando su propio glibc
- 17. Intérprete/compilador Prolog integrado para Java
- 18. ¿puede una función actionscript encontrar su propio nombre?
- 19. Swing: ¿creando un JScrollPane que muestra su componente centrado?
- 20. ¿Es la JVM un compilador o un intérprete?
- 21. Creando mi propio objeto "entero" en Python
- 22. Variable miembro de clase C++ que conoce su propio desplazamiento
- 23. interfaz para el método que devuelve su propio tipo
- 24. escribir mi propio mapa su funcionamiento genérico
- 25. ¿Cómo aloja su propio depósito de huevos?
- 26. Escribo mi propio intérprete JIT. ¿Cómo ejecuto las instrucciones generadas?
- 27. ¿Se puede precalentar un sombreador en un hilo de fondo con su propio contexto?
- 28. manera genérica para reemplazar un objeto en su propio método
- 29. ¿Hay algún compilador/intérprete para ejecutar código para php 5.3?
- 30. programa Clojure leyendo su propio MANIFEST.MF
¿Podrías explicarlo un poco? ¿A qué idioma te refieres? ¿Cómo sería "diferente de un compilador" un intérprete que puede funcionar como un compilador? – Syntactic
http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –
@Syntactic: No sería diferente, ese es el punto. Pero no tendrías que * escribir * un compilador. El proyecto PyPy usa esto, por ejemplo. Solo tiene que escribir un intérprete simple y muy sencillo para su idioma y PyPy Framework genera automáticamente un compilador JIT de código nativo para usted. –