7

¿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

+6

¿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

+0

http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –

+1

@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. –

Respuesta

11

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.

+5

Mi cerebro de cultura pop confundido lo leyó automáticamente como * Segunda Proyección Futurama * – kibibu

0

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.

+0

@Guildenstern, gracias, eliminó un enlace. –

0

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.

Cuestiones relacionadas