parsing compilation incremental-compiler

parsing - Aprendizaje de diseño de compilación incremental



compilation incremental-compiler (3)

Vale la pena ver este libro: creación de un compilador de compilación incremental flexible.

Cita del cap. 10 "Conclusiones":

Este documento ha explorado el diseño del back-end de un sistema de compilación incremental. En lugar de crear un único compilador incremental fijo, este documento ha presentado un marco flexible para construir dichos sistemas de acuerdo con las necesidades del usuario.

Creo que esto es lo que estás buscando...

Editar:
¿Entonces planea crear algo que se conoce como "compilador cruzado"?
Empecé un nuevo intento. Hasta ahora, no puedo proporcionar la referencia definitiva. Si planeas un proyecto tan grande, estoy seguro de que eres un programador experimentado. Por lo tanto, es posible que ya conozca estos enlaces.

Compilers.net
Lista de ciertos compiladores, incluso compiladores cruzados (traductores). Desafortunadamente, con algunos enlaces rotos, pero ''Toba'' todavía funciona y tiene un enlace a su código fuente. Puede ser que esto pueda inspirarte.

clang: una interfaz familiar de lenguaje C para LLVM
Ok, es para LVVM pero la fuente está disponible en un repositorio SVN y parece ser una interfaz para un compilador (traductor). Puede ser que esto pueda inspirarte también.

Hay muchos libros y artículos sobre la creación de compiladores que hacen todo el trabajo de compilación a la vez. ¿Y qué hay del diseño de compiladores / analizadores incrementales, que son utilizados por los IDE? Estoy familiarizado con la primera clase de compiladores, pero nunca he trabajado con la segunda.

Traté de leer algunos artículos sobre Eclipse Java Development Tools, pero describen cómo usar una infraestructura completa (es decir, API) en lugar de describir el diseño interno (es decir, cómo funciona internamente).

Mi objetivo es implementar un compilador incremental para mi propio lenguaje de programación. ¿Qué libros o artículos me recomendarías?


Veo que hay una respuesta aceptada, pero creo que algún material adicional podría incluirse de manera útil en esta página.

Leí el artículo de Wikipedia sobre este tema y lo vinculé a un artículo de DDJ de 1997:

http://www.drdobbs.com/cpp/codestore-and-incremental-c/184410345?pgno=1

La carne del artículo es la primera página. Explica que el código en el editor está dividido en partes que están "incorporadas" en una "CodeStore" (base de datos). Las piezas se incorporan a través de una cola de trabajo que contiene piezas no incorporadas. Se puede analizar un trozo de código y devolverlo a la cola de trabajo varias veces, con algunas fallas en cada intento, hasta que se complete satisfactoriamente. La base de datos incluye dependencias entre las piezas para que, cuando se edite el código fuente, se puedan ver los efectos en la pieza editada y en otras piezas, y estas piezas pueden reprocesarse.

Creo que otros sistemas abordan el problema de manera diferente. Java presenta problemas diferentes a C / C ++ pero también tiene ventajas, por lo que Eclipse quizás tenga un diseño diferente.


Voy a estar en desacuerdo con la sabiduría convencional en este caso porque la sabiduría más convencional hace suposiciones no escritas acerca de sus objetivos, tales como diseños completos del lenguaje y la necesidad de una eficiencia extrema. De su pregunta, estoy asumiendo estos objetivos:

  • aprenda a escribir su propio idioma
  • juega con tu lenguaje hasta que se vea elegante
  • intente emitir código en otro idioma o código de bytes para la ejecución real.

Desea construir un arnés de piratería y un analizador de descenso recursivo.

Esto es lo que podría querer construir para un arnés, usando solo un procesador basado en texto.

  1. Cambie el fragmento de código (ahora "EN 0700 ESTABLECER LUCES DE PASILLO EN TODO")
  2. Compila el fragmento
  3. Cambie el archivo de código (ahora "tests.l")
  4. Compilar desde el archivo
  5. Alternar salida Lexer (ahora ENCENDIDO)
  6. Alternar la salida del emisor (ahora ENCENDIDO)
  7. Alternar ejecución en el hardware del hogar (ahora desactivado)

    ¿Tu comando, señor?

Probablemente quiera escribir su código en Python u otro lenguaje de scripting. Estás optimizando tu velocidad de juego, no la ejecución. Un analizador de descenso recursivo podría verse así:

def cmd_at(): if next_token.type == cTIME: num = next_num() emit("events.setAlarm(events.DAILY, converttime(" + time[0:1] + ", " + time[2:] + ", func_" + num + ");") match_token(cTIME) match_token(LOCATION) ...

Entonces necesitas escribir:

  • Un pequeño menú para hackear.
  • Algunas rutinas lexing, para devolver diferentes tokens para números, palabras reservadas y similares.
  • Un montón de lógica para lo que tu lenguaje

Este enfoque tiene como objetivo acelerar el ciclo para hackear el lenguaje. Cuando hayas terminado con este enfoque, alcanzas BISON, pruebas de arneses, etc.

¡Hacer tu propio idioma puede ser un viaje maravilloso! Espera aprender No esperes hacerte rico.