Red de conocimiento informático - Material del sitio web - Cómo utilizar AST para generar el flujo de control de un programa

Cómo utilizar AST para generar el flujo de control de un programa

Para un lenguaje de programación con características de programación estructuradas, la incompatibilidad entre AST y el análisis de flujo radica en los siguientes aspectos: estos lenguajes de programación tendrán ramas, bucles, interrupción/continuación o ir restringido. Las estructuras gramaticales como el manejo de excepciones implican un control discontinuo. flujo; aunque la estructura de AST omite algunos detalles gramaticales, todavía está relativamente cerca de la gramática del idioma, por lo que el flujo de control en AST a menudo está implícito en los nodos correspondientes a las estructuras gramaticales anteriores. Para empeorar las cosas, muchos de estos lenguajes de programación tienen expresiones condicionales (generalmente el ?: operador ternario) y expresiones de operación lógica con semántica de evaluación de cortocircuito (generalmente &&, ||| metaoperador), estas "expresiones" también Implican controlar el flujo, lo que va aún más allá.

Por lo tanto, la práctica ortodoxa recomienda convertir el AST en una representación intermedia (IR) más detallada y exponer explícitamente el flujo de control antes del análisis del flujo de datos. Esto es exactamente lo que enseñó Hushu. El Capítulo 7 presenta la generación de IR a partir de AST y el Capítulo 8 presenta el flujo de control y los bloques básicos en IR. Tanto las respuestas de @vczh como las de @陈伟 mencionaron esto. La respuesta de @Shao Cheng mencionó los capítulos 8-9 del Libro de los Dragones. Creo que sería mejor incluir el Capítulo 6 (especialmente 6.6 Flujo de control).

Para el análisis del flujo de datos, no importa si el IR es un árbol, DAG o lineal, siempre que el flujo de control y las dependencias de los datos sean fáciles de analizar. La forma SSA de IR puede exponer explícitamente los dos, especialmente la relación uso-def (algunos IR mantendrán adicionalmente la relación def-uso), por lo que es muy popular entre los compiladores y analizadores de programas modernos.