Compiladores
(Aula do dia 30/08/2000)
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: