/ / definiciones recursivas mutuas de funciones en un compilador de bison flex - c, bison, flex-lexer

Definiciones de funciones recursivas mutuas en un compilador de Flex Bison - C, Bison, Flex-Lexer

Estoy codificando un compilador para un inexistenteidioma (es un ejemplo de lenguaje para un proyecto universitario). En la sección reservada para las definiciones de funciones, el compilador debe poder compilar correctamente tales definiciones:

function a() {
//some code...
b();
//other code...
}
//other function definitions
function b() {
printf("hellon");
}

El compilador debe analizar la definición de la funciónverificación de existencia "suspendida" para el uso de la función b dentro de la función a. Al final de todas las definiciones de funciones, el compilador verificará que todas las funciones utilizadas se hayan definido previamente. ¿Alguien podría sugerir una forma inteligente de hacer esto?

Respuestas

2 para la respuesta № 1

A menos que su gramática tenga serios problemas de ambigüedad, no debería necesitar saber que b Es una función para analizar correctamente. b(). Entonces, en cuanto a los principios generales, diría que la respuesta es simple: no hacer nada especial y el análisis debería funcionar bien.

Una vez que haya creado su AST, querrá hacer un análisis semántico, que incluirá la verificación de que cada nombre utilizado como función en realidad es Una función. Probablemente tendrás otras restricciones semánticas, también. Un simple paseo por el árbol del AST debería poder decirle lo que necesita saber.