Sé que mi pregunta va a la cueva subterránea de galaxias donde nacen las lenguas e involucra algunas matemáticas lambda y años luz de estudio de google. Pero, ¿qué tipo de conocimiento es necesario para crear un lenguaje?
Sé que mi pregunta va a la cueva subterránea de galaxias donde nacen las lenguas e involucra algunas matemáticas lambda y años luz de estudio de google. Pero, ¿qué tipo de conocimiento es necesario para crear un lenguaje?
Busca "bootstrapping".
Básicamente, comienzas con un proceso / conjunto de funciones muy mínimo que se puede usar para compilar el código que define un compilador un poco más funcional. Esto crea su próximo compilador que luego puede usarse para construir código que puede hacer aún más. Repite este proceso hasta que tenga un compilador completo que pueda compilar todas las características del lenguaje.
La otra alternativa es escribir la primera versión del compilador en un idioma diferente y luego escribir la próxima versión en el idioma de destino.
La respuesta de ChrisF es excelente, pero quería agregar este ejemplo que siempre me quedé después de mi curso de informática en bootstrap.
Supongamos que tiene un compilador de C básico que aún no admite códigos de escape para cadenas, y desea agregarlo. Podría agregar un fragmento de código similar a este:
if( str[i] == 0x5c ) { // ASCII code for backslash
switch( str[i+1] ) {
case 'n': return 0x0a; // ASCII code for new line
case 't': return 0x09; // ASCII code for tab
// ... // more ASCII code for other escapes
default: return str[i+1];
}
}
Después de agregar esto al compilador y generar un nuevo binario del compilador, podría reescribirlo en:
if( str[i] == '\' ) {
switch( str[i+1] ) {
case 'n': return '\n';
case 't': return '\t';
// ...
default: return str[i+1];
}
}
Eso eliminaría cualquier conocimiento sobre los códigos ASCII del código fuente del compilador, pero el compilador generará mágicamente los códigos correctos.
Bootstrapping es definitivamente la forma estándar de compilar un compilador hoy. Pero recuerde que no necesita un compilador o intérprete para escribir un programa en un idioma. Por ejemplo, Christopher Strachey escribió un famoso programa de IA que podía jugar a Damas en CPL antes de que hubiera un compilador para CPL . Tuvo que traducir el programa al código de máquina "manualmente", lo cual es tedioso y propenso a errores, pero no es realmente difícil (por eso las computadoras pueden hacerlo tan bien).
Espero que esto no esté fuera de tema, pero quería señalar que, una vez que tenga un compilador de C para una plataforma X, se puede realizar un arranque para otras plataformas mediante el uso de compilación cruzada:
En otras palabras, cuando tienes el primer huevo, es fácil hacer más huevos.
Lea otras preguntas en las etiquetas programming-languages c lambda
En ingeniería de software, generalmente desea utilizar la biblioteca IDFS cuando corresponda. Antes de IDFS, generalmente querrá usar un formato similar a XML (cuando sea posible), pero es posible que deba convertirlos. Debido a que Windows usa la biblioteca IDCTools existente, no podrán extraer toda la información de XML. ¡Una vez que haya logrado esto, el proyecto habrá finalizado! Instala Wine y resuelve la interfaz de usuario en.win. ¡Ahora vuelve al código! Intenta subir los cambios. Puede haber ataques... Lee mas