Compiladores

(Aula do dia 30/08/2000)

 

  1. Escolher uma das maneiras abaixo de se criar um árvore de execução para o exemplo:

v <= 5 + 3 + a #

 

 

a)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b)

 

 

 

 

 

 

 

 

 

 

 

 

 

3)

 

 

 

 

 

 

 

 

 

 

Obs.: Devemos tratar precedência de operadores.

2) Termo

A avaliação de qualquer programa (corpo) ou função primitiva retornará um termo. Um termo é composto de um campo valor e um campo tipo, que indica o tipo do valor. Os tipos são:

Um termo pode ser Verdadeiro ou falso, mas só será falso quando o tipo for B e o valor for F (falso).

 

3) Trabalho

O compilador inicialmente irá carregar a tabela de funções primitivas e mostrar um menu com as opções abaixo, onde as em negrito são as obrigatórias e as demais são opcionais:

4) Procedimentos:

Proc ExecutaProg (prog: Tprog; VAR termo: Ttermo)

VAR ArvExec: TarvExec;

Res: boolean;

BEGIN

ConsultaCorpo(prog,ArvExec,res);

IF res

THEN ExecCorpo(ArvExec,termo)

END;

Proc ExecutaCorpo (ArvExec: TArvExec; VAR termo: Ttermo)

BEGIN

IF ArvExec^.tipo=F

THEN ExecPrim(ArvExec^.esq, ArvExec^.Dir,termo)

ELSE

IF ArvExec^.tipo = OpE

THEN

BEGIN

ExecCorpo(ArvExec^.Esq,termo);

IF ((termo^.tipo = B) AND (termo^.valor = F)) OR (termo^.tipo=E)

THEN

ELSE execCorpo(ArvExec^.Dir,termo)

END;

ELSE

ExecCorpo(ArvExec^.Esq,termo1);

ExecCorpo(ArvExec^.Dir,termo2);

ExecOpr(ArvExec^.tipo,termo1,termo2,termo);

END;

END;

Obs.: O tipo em ArvExec pode ser: