make create compiler gcc compiler-construction parsing disassembly

gcc - create - ¿Cómo puedo ver el árbol de análisis sintáctico, el código intermedio, el código de optimización y el código de ensamblaje durante la compilación?



make ac compiler (2)

Puede ver la salida del preprocesador con -E . -fdump-tree-* vuelca la representación interna del árbol, por ejemplo -fdump-tree-all . Existen varias opciones -d para volcar las representaciones intermedias de RTL, por ejemplo, -fdump-rtl-all (consulte el manual de los pases individuales de los que obtiene volcados); Además, -dD vuelca todas las definiciones de macro.

Estoy estudiando el curso Compiladores, la compilación del programa sigue los pasos a continuación

  1. Análisis léxico
  2. Análisis de sintaxis
  3. Análisis semántico
  4. Generación de código intermedio
  5. Optimización de código
  6. Generación de código objetivo

¿Cómo puedo ver el resultado de cada paso? Por ejemplo, quiero ver el árbol de análisis sintáctico después del análisis de sintaxis.

Estoy compilando el programa en la máquina Linux con el compilador GCC.

Podemos ver el código de ensamblaje del programa utilizando la opción de compilador Wa en gcc, de manera similar, hay opciones para ver tokens, árbol de análisis y el código de Inetmediate.


Si bien puedes usar las -fdump-tree-all y -fdump-rtl-all en gcc, no creo que su salida sea muy útil para un compilador. FWIW, comencé a trabajar en gcc como parte de mis estudios de doctorado, ya había completado dos cursos de pregrado, y encontré que gcc y sus archivos de depuración son opacos y difíciles de seguir.

Además, gcc no sigue realmente el diseño de compiladores de libros de texto. Nadie lo hace, realmente, porque no funciona bien de esa manera. Estoy bastante seguro de que gcc no produce un árbol de análisis sintáctico o un árbol de sintaxis abstracta. Construye un IR (llamado gimple) sobre el cual realizar sus optimizaciones de alto nivel.

Sugeriría probar LLVM, que tiene la reputación de estar bien diseñado y ser fácil de seguir. Otra alternativa es descargar el código de un libro de texto, especialmente el libro de Appel, suponiendo que esté disponible.

Otra sugerencia, si puedo recomendar la mía por un momento, es usar phc . Con phc, puede ver el árbol de análisis sintáctico como una imagen, y ver el AST y el código fuente después de cada pasada en el compilador. Aquí hay una comparación de partes del AST y del árbol de análisis sintáctico . Se generan trivialmente usando phc. En la rama de dataflow , puede ver el IR del compilador, el CFG, el formulario SSA y la salida de depuración de inferencia de tipo y análisis de alias. También puede activar y desactivar optimizaciones y pases para ver el efecto que tienen.

Creo que esto podría ser útil para ti.