Construção de compiladores/Análise semântica: diferenças entre revisões
[revisão pendente] | [revisão pendente] |
Conteúdo apagado Conteúdo adicionado
Consertando erros de gramática, colocando itálico em termos estrangeiros. |
|||
Linha 3:
== Objetivo da Análise Semântica ==
A [[w:análise semântica|análise semântica]] verifica e aponta as expressões que quebram qualquer regra determinada pela gramática. Mas o nível de complexidade aumenta quando tratamos de
O objetivo da análise semântica é, assim, criar, a partir de um texto-fonte, uma interpretação expressa em alguma notação adequada - geralmente uma linguagem intermediária do [[w:compilador|compilador]]. Isto é feito com base nas informações das tabelas e nas saídas dos outros analisadores. Denomina-se [[w:semântica|semântica]] de uma sentença o significado por ela assumido dentro do contexto em que se encontra. Semântica de uma linguagem é a interpretação que se pode atribuir ao conjunto de todas as suas sentenças.
Linha 9:
A análise semântica utiliza-se da verificação de [[w:Tipagem|tipos]] para verificar se um determinado operando recebe outro operando de mesmo tipo. Um exemplo comum nas linguagens de programação é a análise semântica retornar um erro quando uma variável do tipo numérica (real ou inteira) receber um valor tipo texto (string).
Um compilador usa uma tabela de símbolos (TS) para guardar informações sobre os nomes declarados em um programa. A TS é pesquisada cada vez que um nome é encontrado no programa fonte. Alterações são feitas na TS sempre que um novo nome ou nova informação sobre um nome já existente é obtida. A gerência da TS de um compilador deve ser implementada de forma a permitir inserções e consultas da forma mais eficiente possível, além de permitir o crescimento dinâmico da mesma.Cada entrada na
Exemplos típicos de erros semânticos são:
Linha 19:
O processo de verificação dos tipos ocorre em tempo de compilação (checagem estática) ou em tempo de execução (checagem dinâmica). As linguagens de programação conforme a especificação da linguagem podem ser referidas como de tipagem forte e tipagem fraca, influenciando o processo de checagem de tipo.
===Tipagem estática===
É quando acontece durante a compilação, pode ser por meio de alocação, desalocação de
===Tipagem dinâmica===
É quando acontece durante a execução, pode ser por meio de alocação na ''heap'' com ''malloc'' (em C), verificação de ''cast'' de classe (em
===Combinação de tipagem estática e dinâmica===
|