Pregunta

En el lenguaje de referencia hacia adelante como C #, ¿cómo el compilador de manejar esto? Cuáles son los pasos en los que operan el compilador?

¿Fue útil?

Solución

La principal diferencia entre permitir que avance referencia o no está usando un un compilador pase o un pase de múltiples uno. Por supuesto para manejar hacia adelante haciendo referencia usted tiene que comprobar las definiciones de símbolos y no verificación de tipos de después que ha generado el árbol lleno de sintaxis abstracta de la fuente que está compilando.

Así que no hay problema, la primera vez que encuentre una referencia hacia delante que sólo dependen de que se definirá más adelante (se puede marcar como pendiente en la tabla de símbolos) a continuación, cuando se encuentra la definición real a refinar el objeto de símbolo en símbolo mesa.

Después se puede typecheck o comprobar si algunos símbolos están aún pendientes (por lo que no existe una definición real, y puede elevar un error de semántica) ..

Otros consejos

Para ello, haciendo dos pasadas de compilación. El primer pase analiza el código y recoge todos los identificadores utilizados. El segundo pase resuelve todos los identificadores.

En un lenguaje con una sola compilador pase, como Pascal, sólo que al revés referencias se pueden utilizar como el tipo de un identificador han a ser conocido antes de que pueda ser resuelto.

exactamente de la misma forma en C ++ lo maneja, creo, única diferencia:. La sintaxis es bastante simple que el compilador puede construir el árbol de análisis sin necesidad de que le diga qué tipo de objeto sintáctico sus símbolos aún no declarados se refieren a

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top