11.07.2015 Views

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

5.1.2 Verificações de ContextoUm compilador precisa fazer uma verificação estática das estruturas do programa, paraassegurar que o mesmo esteja livre de certos tipos de erros, tais como:Verificação de Tipos verifica se um operador está sendo aplicado a operandos de tiposincompatíveis. Exemplo: 10 + TRUE.Verificação de Fluxo de Controle os enunciados de fluxo de controle (repetições, p.ex.) precisam ter algum local de retorno para onde transferir o controle. Exemplo:um comando tipo break em C precisa estar envolvido por algum comando de fluxode controle (while, for ou switch).Verificações de Unicidade verifica se os identificadores foram declarados de formaunívoca, ou seja, sem duplicidade.Verificações relacionadas aos nomes existem linguagens que apresentam particularidadesacerca dos identificadores do programa. Essa etapa da análise verifica se essasparticularidades foram respeitadas. Exemplo: A linguagem ADA exige que blocosde comandos comecem e terminem com o mesmo identificador.Sistema de TiposDefine-se como um sistema de tipos ao conjunto de regras de aplicabilidade entre os tiposdos operandos e os operadores da linguagem. Exemplo: Seja o comando X = A + B. Umsistema de tipos iria validar se os tipos associados aos operandos A e B são válidos para aadição e, em caso afirmativo, qual seria o tipo resultante, e ainda, se esse tipo resultanteé compatível com o tipo associado à variável X.Todo o processo de análise semântica para verificação de tipos é realizado a partir daconstrução de expressões de tipo, que podem ser compostas: ou por um tipo simples oupor um construtor de tipos (tipo resultante da aplicação de um operador).Voltando no exemplo: X = A+B; supor que X e B sejam declarados do tipo inteiro eA seja do tipo real, assim temos:===(inválido)X +int +int +(float)ABfloatintfloatintTipo SimplesConstrução de TiposFigura 5.3: Tipos Simples e Construtor de TiposO processo de verificação de tipos consiste da aplicação de regras semânticas àsproduções da gramática sob análise. Usualmente, um atributo sintetizado tipo é suficientepara tal análise.44

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!