Pergunta

Na linguagem de referência para a frente, como C#, como o compilador lida com isso? Quais são as etapas em que o compilador opera?

Foi útil?

Solução

A principal diferença entre permitir a referência direta ou não é usar um um compilador de passagem ou uma passagem múltipla. Obviamente, para lidar com a referência para a frente, você precisa verificar as definições de símbolos e fazer uma escala de digitação DEPOIS Tendo gerado a árvore de sintaxe abstrata completa da fonte, você está compilando.

Portanto, não há problema, quando você encontra uma referência avançada pela primeira vez, confia que ela será definida posteriormente (você pode marcá -lo como pendente na tabela de símbolos), quando encontrar a definição real que refina o objeto de símbolo na tabela de símbolos.

Depois que você pode digitar ou verificar se alguns símbolos ainda estão pendentes (para que não haja definição real e você pode levantar um erro semântico).

Outras dicas

Faz isso fazendo dois passes de compilação. O primeiro passe analisa o código e coleta todos os identificadores usados. O segundo passe resolve todos os identificadores.

Em um idioma com um único compilador de passagem, como o Pascal, apenas referências para trás podem ser usadas como o tipo de identificador deve ser conhecido antes que possa ser resolvido.

Exatamente da mesma maneira que o C ++ lida com isso, eu acho, apenas diferença: a sintaxe é simples o suficiente para que o compilador possa construir a árvore de análise sem precisar que você diga a que tipo de objeto sintático seus símbolos ainda não declarados se referem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top