Cómo crear un compilador usando C ++

Aproximadamente.

Debe escribir un analizador, que analiza el texto de entrada en árboles.
Construye una tabla de símbolos y establece de qué tipo es cada símbolo.
Verifica su árbol para asegurarse de que cada una de sus expresiones y asignaciones sean del tipo correcto.

Luego está la generación de código.
Atraviesas tu árbol. Y para cada tipo de entidad, escupe código de bajo nivel que hace lo correcto.
Entonces, una declaración de asignación podría convertirse en un código que evalúa una expresión a la derecha del signo igual, luego copia el resultado en un símbolo, porque ahora cada símbolo podría ser una dirección de memoria real.

La forma moderna de hacer esto es como LLVM. (o en realidad usa LLVM)
Primero diseñas una especie de lenguaje ensamblador idealizado. Lo que facilita la fase de generación de código. Generas código para esa máquina.

Y entonces…
Luego traduce de este código idealizado a su arquitectura de destino.
Luego empaquete el código objeto en un ejecutable.

Hay libros sobre estas cosas. ¡Cuál deberías leer!

Lea primero Enseñe a programar en diez años para comprender que la programación es difícil, porque no se trata de codificar en un lenguaje de programación, sino de resolver problemas con la ayuda de la computadora.

Aprende varios lenguajes de programación. Estudie el código fuente de algún software libre existente. Comprenda la importancia de optimizar los compiladores (es por eso que la mayor parte de la compilación no se trata de analizar).

Lea SICP, Introducción a los algoritmos, el Libro del dragón, Lisp en piezas pequeñas. Lenguaje de programación Pragmática, tipos y lenguajes de programación.

Estudie el código fuente de los compiladores de software libre existentes.

He escrito cientos de diapositivas, disponibles en la página de documentación de MELT, relacionadas con el compilador GCC.

Escriba un pequeño complemento (o extensión MELT) para el compilador GCC.

Un compilador como primer paso es bastante complicado ya que hay muchas cosas que debes entender y estudiar a la vez.

Lo primero que debe hacer es el analizador y la representación interna de su código. Sugiero que comience con un intérprete que

  1. contiene el analizador y crea una representación interna de la semántica del código fuente.
  2. Ejecuta la representación interna sin obligarlo a conocer bien el código de máquina del microprocesador de bajo nivel necesario para crear el generador de código.

Un ejemplo simple en C ++ (el primero que apareció buscando en Google) es TAWK: un intérprete simple en C ++

Supongo que esto podría ser un punto de partida de Dios. Además viene del dr. Dobbs, una revista de computadoras que compré por más de una década.

Su próximo paso es aprender la estructura de datos.
Ahora, después de aprender la estructura de datos, abra su navegador y busque algo llamado Dragon Book, compre una copia de eso y sígalo paso a paso, le dará una base sólida en el diseño del compilador y simultáneamente puede seguir el curso sobre diseño del compilador en Coursera por el profesor Allex Aikens.
Hay algunas herramientas disponibles para cumplir con el diseño de LEX para el análisis léxico y YACC para el análisis. Creo que este contenido será suficiente para que diseñes tu primer compilador.

Analiza la expresión C ++ (probablemente usando BNF) y correlaciona con el código psuedo. Después de lo cual puede escribir un ejecutor de pseudocódigo para cualquier máquina en la que esté trabajando o traducirlo a código de máquina.

De alguna manera, no hay diferencia (excepto por la eficiencia) si uno escribe un compilador en código ensamblador o algún lenguaje de nivel superior capaz de cadenas.

Junto a volar, escribir un compilador en C fue lo más emocionante que he hecho con mi ropa puesta …

Bueno, lo primero que necesitará, que sospecho que aún no tiene, es un buen conocimiento del ensamblador de su máquina de destino. Un compilador convierte un lenguaje de entrada en ensamblador. Puede controlar su idioma de entrada, solo use un subconjunto del idioma para comenzar, por ejemplo, pero la salida debe ejecutarse en una computadora real, utilizando el conjunto de instrucciones de esa computadora, con todas sus limitaciones e irregularidades. Si no eres un programador de ensamblador bastante activo, no trataría de escribir un compilador.

Comience con Pascal.

Es un lenguaje de un solo paso que puede compilar linealmente sin tener que pensar mucho.

Después de eso: las cosas se vuelven reales.

De hecho, he considerado hacer un front-end de Ada para LLVM. Eso es como más de 10 años de compromiso. COBOL sería … más años de los que le quedan a nadie.

¿Qué idioma quieres compilar?

Personalmente, si fuera usted, comenzaría tratando de escribir un intérprete BASIC en C ++, que le dará una idea sobre cómo analizar el código y debería permitirle obtener resultados rápidamente.

More Interesting

¿Qué desearías haber sabido antes de tu primera pasantía de desarrollador de software?

¿Alguien puede ayudar a mi tarea (C ++)?

Estoy igualmente interesado en 'ingeniería mecánica' e 'ingeniería de software' ¿qué campo debo elegir?

¿Qué debe saber todo un ingeniero de telecomunicaciones para lanzarse a la industria del software, aparte de la C básica?

¿Cuál es el mejor software para la documentación?

¿Dónde y para qué se utiliza Java en la industria?

¿Qué es necesario o valioso saber sobre el desarrollo de software industrial para un estudiante universitario?

¿Por qué usaría o no utilizaría Mendix o OutSystems para el desarrollo rápido de aplicaciones comerciales?

¿Qué debe hacer el equipo de prueba cuando el desarrollo no realiza una prueba unitaria?

¿Cuál es la mejor estrategia para un ingeniero de software brillante sin un título para emigrar a un país del primer mundo?

'80% de los recursos de desarrollo de software se destinan a pruebas (QA) '. ¿Es esta la verdad o un mito?

¿Cómo afectan los servicios de otras compañías de software a la industria del software?

¿En qué se diferencia la administración de un pequeño equipo de programadores a la administración de un gran equipo de programadores?

¿Qué software de pedido / inventario está más orientado, por lo que para Amazon recomendaría como un arranque / menor costo para comenzar? Incorporación a un software más avanzado / costoso en el futuro.

¿Mi cliente necesita una licencia de importación para externalizar su trabajo de desarrollo de software?