Вы находитесь на странице: 1из 27

COMPILADO

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.

Dependendo da linguagem de programao,


outros tipos de verificaes podem ser
necessrios

Anlise Semntica
A sada do analisador semntico o
cdigo algoritmo sem erros de
compilao.

Tipos bsicos e derivados


Bsicos: inteiro, char, string, tipos
enumerados, subrange (exemplo
1..10), etc.
Derivados: ponteiro para inteiro,
array de char, registro, classe, etc.

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

var ar: array[1..10] of integer;


Expresso de
tipo.

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

Para que serve?


Facilitar programao
Evitar escapamento de erros simples
etc.

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

Casting: O programador precisa


void interpret(Instruction insn) {
explicitar

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;

Uso indevido de palavra reservada nas


declaraes e no cdigo;
Variveis no declaradas;
Expresses incorretas;
...

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;

{No configura Erro}

Erros Semnticos
Erro 4: Identificador xx no declarado.
Linha x Coluna Y
Soma := 4;
Linha 1 Coluna 1

Erro 4: Identificador Soma no declarado.

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

Erro 7: Operador Invlido. Linha 1

Coluna 6

X := a > 0;
Coluna 8

Erro 7: Operador Invlido. Linha 1

DVIDAS

Вам также может понравиться