Академический Документы
Профессиональный Документы
Культура Документы
RES
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br
Anlise
Semntica II
ROBERTO TENORIO FIGUEIREDO
www.osfedera.com
tenorio.petrolina@bol.com.br
Organizao do compilador
rvore
sinttica
tokens
Parser
rvore
sinttica
Semntico
tabela de
smbolos
Gerador de
cdigo
intermedirio
Anlise Semntica
Trata principalmente dos tipos. Entre suas
tarefas, temos:
Verificao de tipos
Verificao da unicidade da declarao de
variveis.
Anlise Semntica
A sada do analisador semntico o
cdigo algoritmo sem erros de
compilao.
Expresses de tipo
Construes da linguagem que
declaram tipos
Construtores bsicos. Eg., integer,
boolean, etc.
Construtores
Construtores elaborados: E.g., record,
class, etc. referemelaborados
se a outros tipos em
uma cadeia com
No confundir com
tipos bsicos no
tipo de uma
final.
expresso
Tipos de variveis
Sistema de tipos
uma coleo de regras associadas
GLC que define o uso de tipos dentro do
programa,
Associa-se a cada produo da gramtica
uma regra de tipos para aquela produo,
A violao de alguma regra implica num
erro de tipos.
Sistema de tipos
O que faz?
Identifica certos tipos de erros
estaticamente (tempo de compilao)
Define os tipos vlidos e as regras para se
atribuir tipos s construes da linguagem
Regras Semnticas
Adicione regras semnticas para
comandos
S id = E
Extenso
S if E then S
da
S while E do S
linguage
SS;S
m
Regras Semnticas
S id = E
{S.type = if (lookup(id.entry) ==
E.type) void
else type_error }
S if E then S
{S.type = if (E.type == boolean)
S1 .type
else type_error }
Regras Semnticas
S while E do S
{S.type = if (E.type == boolean)
S1.type
else type_error }
SS;S
{S.type = if (S1.type == void &&
S2.type == void) void
else type_error }
Converso de tipo
Coero: O compilador adiciona
implicitamente funo de converso
Normalmente no h perda de
informao. Por exemplo, de int para
float
void foo(double d) {
((int) k) * 10
}
switch (insn.opcode()) {
case Opcode.IADD :
execArith((ArithInstruction)
insn));
break;
Tempo de checagem
Statically-typed: checagem durante
compilao
Dynamically-typed: erros de tipo so
checados dinamicamente
Motivo de grande debate
at hoje!
Dynamically-typed mais flexvel (menos
proibitivo) no uso de tipos, porm pode
deixar escapar erros e checagem de
tipos pode ser custosa.
Erro na Checagem
Tipos incompatveis: soma, atribuio,
chamada de mtodo, etc.
Fluxo de controle: break ou continue fora de
loop ou switch
Definio de varivel sem uso (warning)
Uso de varivel sem definio
Indexao em varivel no array
Referncia em varivel no ponteiro
etc.
Demais Erros
Outra preocupao semntica:
Duplicidade de variveis.
Essa checagem feita nas declaraes de
variveis a cada varivel declarada;
Erros Semnticos
No trabalho:
Erro 3: Tipos Incompatveis. <tipo 01> e <tipo
02>. Linha x Coluna Y.
Erro 4: Identificador xx no declarado. Linha
x Coluna Y
Erro 5: Palavra reservada xx usada como
identificador. Linha X Coluna Y.
Erro 6: Varivel xx declarada em duplicidade.
Linha X Coluna Y.
Erro 7: Operador Invlido. Linha X Coluna Y.
Erros Semnticos
Erro 3: Tipos Incompatveis. <tipo 01>
e <tipo 02>. Linha x Coluna Y.
Integer x;
...
X := 3/4;
Erro 3: Tipos Incompatveis. Integer e real. Linha 3
Coluna 6.
Erros Semnticos
Erro 3: Tipos Incompatveis. <tipo 01>
e <tipo 02>. Linha x Coluna Y.
Integer x;
...
All (x);
Erro 3: Tipos Incompatveis. String e integer. Linha 3
Coluna 6.
Erros Semnticos
Erro 3: Tipos Incompatveis. <tipo 01>
e <tipo 02>. Linha x Coluna Y.
Real x;
...
X := 4;
Erros Semnticos
Erro 4: Identificador xx no declarado.
Linha x Coluna Y
Soma := 4;
Linha 1 Coluna 1
Erros Semnticos
Erro 5: Palavra reservada xx usada
como identificador. Linha X Coluna Y.
Y := if;
Erro 5: Palavra reservada if usada como identificador. Linha
1 Coluna 6.
Erros Semnticos
Erro 6: Varivel xx declarada em
duplicidade. Linha X Coluna Y.
Integer SOMA, y , soma;
Erro 6: Varivel soma declarada em duplicidade. Linha 1 Coluna
19.
Erros Semnticos
Erro 6: Varivel xx declarada em
duplicidade. Linha X Coluna Y.
Integer SOMA, yy;
Real yy;
Erro 6: Varivel yy declarada em duplicidade. Linha 2 Coluna 6.
Erros Semnticos
Erro 7: Operador Invlido. Linha X
Coluna Y.
If X + 1 then
Coluna 6
X := a > 0;
Coluna 8
DVIDAS