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
Luk3 (discussão | contribs)
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 liguagenslinguagens dependentes de contexto. A análise semântica busca apontar (não resolver) este tipo de erros (dependentes de contexto).
 
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 tsTS é a declaração de um nome. Cada entrada na tsTS pode ser implementada como um registro ( ''record'' ou ''struct'') contendo campos (nome, tipo, classe, tamanho, escopo, etc.) que a qualificam.
 
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 variaveisvariáveis locais ou descoberta de tipos em expressões numericasnuméricas.
===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 javaJava), ou verificação de limites de ''arrays'' (em javaJava).
===Combinação de tipagem estática e dinâmica===