2009-10-05 21 views
8

Los lenguajes de programación parecen pasar por varias etapas. En primer lugar, alguien sueña con un nuevo idioma, Foo Language. El compilador/intérprete está escrito en otro idioma, generalmente C o algún otro idioma de bajo nivel. En algún momento, FooL madura y crece, y eventualmente alguien, en algún lugar escribirá un compilador y/o intérprete para FooL en FooL.¿Qué características de lenguaje se requieren en un lenguaje de programación para hacer un compilador?

Mi pregunta es esta: ¿Cuál es el subconjunto mínimo de características del lenguaje tal que alguien podría implementar ese lenguaje en sí mismo?

+1

¿Completando Turing? –

+2

see: http://stackoverflow.com/questions/13537/bootstrapping-a-language –

+0

No es lo mismo, pero una lectura relacionada: [what-is-the-best-language-to-write-a-compiler-in ] (http://stackoverflow.com/questions/809710/what-is-the-best-language-to-write-a-compiler-in) – nawfal

Respuesta

2

Una opción es un read-eval-print loop. Esto se puede usar para construir muchos constructos de alto nivel. Creo que este es el camino tomado por LISP.
No estoy seguro de los comienzos de C, pero creo que comenzó con unas pocas llamadas al sistema para implementar la bifurcación, bucles, asignación y E/S de un solo carácter, y se construyó a partir de ahí.

4

En teoría, sorprendentemente poco. Un computability theorist diría que todo lo que necesita es mu-recursion o un Turing machine o similar.

Sin embargo, desde un punto de vista práctico, no va a estar muy contento tratando de implementar un lenguaje de programación en una máquina de Turing. Diría que, como mínimo, desearía tener todas las construcciones de flujo de control habituales, los tipos de datos primitivos, las subrutinas, así como las matrices y las estructuras. Eso debería ser suficiente para permitirle implementar ese subconjunto del idioma en el idioma en sí, y luego puede iniciarse desde allí.

+2

"En teoría, no hay diferencia entre teoría y práctica. En la práctica , Ahi esta." - Olvidé quién. –

+0

"* todo lo que necesitas es una máquina de Turing" me hizo sonreír, considerando que es básicamente el modelo computacional "razonable" más poderoso conocido :-) –

0

Id supongo que un ensamblador haría el corte.

0

Mi pregunta es esta: ¿Cuál es el subconjunto mínimo de características del lenguaje tal que alguien podría implementar ese lenguaje en sí mismo?

No es necesario que el idioma sea útil para otra cosa que no sea la compilación por sí misma? Te presento Useless, el lenguaje en el que cada texto es un programa adecuado y significa "un programa que toma cualquier entrada y se produce a sí mismo" (esto también se conoce como compilador Useless).

+0

Me gusta más el lenguaje de Jon Skeet. Pero por el bien del argumento, asegurémonos de que el lenguaje sea útil, tal como lo define al menos Turing-complere. –

+0

Ese seguro es un lenguaje de programación ** 'Inútil' **. –

+0

@radio: sí, sí lo es. @Matthew: ¿Estás seguro de que el lenguaje de Jon Skeet puede compilarse? –

Cuestiones relacionadas