Cómo utilizar AST para generar el flujo de control de un programa
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.