Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
Transcript of Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
![Page 1: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/1.jpg)
Definição de tipos - LF3
PLP - Apresentação 1
![Page 2: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/2.jpg)
Equipe Felype Santiago Maria Carolina Paola Accioly Rodrigo Cardoso
![Page 3: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/3.jpg)
ProjetoConceitos básicos
![Page 4: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/4.jpg)
Projeto Estender a LF3 com características de Haskell Definição de tipos
Tipos enumerados Tipos complexos Tipos recursivos
![Page 5: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/5.jpg)
Tipos Enumerados Tipo definido por uma quantidade finita de
construtores.
Em Haskell:data Bool = True | Falsedata Estacao = Inverno | Verao | Outono | Primaveradata Temp = Frio | Quente
![Page 6: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/6.jpg)
Tipos Complexos Tipo definido através do uso de outras
definições.
Em Haskell:type String = [Char]type Name = Stringtype Address = None | Addr Stringtype Person = (Name, Address)
![Page 7: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/7.jpg)
Tipos Recursivos Tipo definido através do uso da própria definição.
Em Haskell:data Tree a = Leaf a
| Branch (Tree a) (Tree a)
Branch :: Tree a -> Tree a -> Tree aLeaf :: a -> Tree a
![Page 8: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/8.jpg)
Apresentação – Parte 1
![Page 9: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/9.jpg)
Projeto (parte 1) Estender a LF3 com características de Haskell Definição de tipos (estender a LF3)
Tipos enumerados Tipos complexos Tipos recursivos
![Page 10: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/10.jpg)
Tipos Enumerados (LF4) Definição dos tipos
type Bool = {True, False} type Temp = {Frio,Quente} type diasDaSemana =
{dom, seg, ter, qua, qui, sex, sab} Type meses =
{jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez}
![Page 11: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/11.jpg)
Tipos Enumerados (LF4) Utilização dos tipos definidos
Função NEXT: retorna o elemento declarado imediatamente depois do enum passado como parâmetro.Exemplo: type diasUteis = {seg, ter, qua, qui, sex}
next(ter) = qua
Função PREVIOUS : retorna o elemento declarado imediatamente depois do enum passado como parâmetro.Exemplo: type diasUteis = {seg, ter, qua, qui, sex}
previous(sex) = qui
![Page 12: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/12.jpg)
Tipos Enumerados (LF4) Utilização dos tipos definidos (cont.)
Função ORD: retorna a posição em que o elemento passado como parâmetro foi declarado (o primeiro elemento ocupa a posição 0).Exemplo: type diasUteis = {seg, ter, qua, qui, sex}
ord(qui) = 3
![Page 13: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/13.jpg)
Algumas observações... (LF4) Nenhuma variável pode ser declarada com o
nome de um instância de um tipo enumerado no mesmo escopo. E vice-versa.
Tipos enumerados podem ser redefinidos em escopos mais internos
As instâncias de tipos enumerados não pode ser nenhuma palavra reservada da linguagem (true, false, etc)
![Page 14: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/14.jpg)
Exemplos de programas (LF4) let type d = {dom, seg, ter, qua, qui, sex, sab}
in let var y = sex in next (y) = sab
let type dias = {seg, ter, qua} in let type diasAoContrario = {ter, seg, dom} in next(next(seg)) = ter
![Page 15: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/15.jpg)
Funcionamento das pilhas
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
![Page 16: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/16.jpg)
Pilha de compilação let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in
let type primTrimestre = {jan, fev, mar}, var y = "e"
in next(seg)
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilha de compilação Map auxiliar
![Page 17: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/17.jpg)
Pilha de compilação
x TipoInteiro<x, TipoInteiro>
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilha de compilação Map auxiliar
![Page 18: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/18.jpg)
Pilha de compilação
x TipoInteiro
<sex, TipoEnum (diasUteis)>
<qui, TipoEnum (diasUteis)>
<qua, TipoEnum (diasUteis)>
<ter, TipoEnum (diasUteis)>
<seg, TipoEnum (diasUteis)>
<x, TipoInteiro>
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilha de compilação Map auxiliar
![Page 19: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/19.jpg)
Pilha de compilação let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in
let type primTrimestre = {jan, fev, mar}, var y = "e"
in next(seg)
<sex, TipoEnum (diasUteis)>
<qui, TipoEnum (diasUteis)>
<qua, TipoEnum (diasUteis)>
<ter, TipoEnum (diasUteis)>
<seg, TipoEnum (diasUteis)>
<x, TipoInteiro>
Pilha de compilação Map auxiliar
![Page 20: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/20.jpg)
Pilha de compilação
Pilha de compilação Map auxiliar
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
<sex, TipoEnum (diasUteis)>
<qui, TipoEnum (diasUteis)>
<qua, TipoEnum (diasUteis)>
<ter, TipoEnum (diasUteis)>
<seg, TipoEnum (diasUteis)>
<x, TipoInteiro>
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
<mar, TipoEnum (primTrimestre)>
<fev, TipoEnum (primTrimestre)>
<jan, TipoEnum (primTrimestre)>
![Page 21: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/21.jpg)
Pilha de compilação
Pilha de compilação Map auxiliar
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
<sex, TipoEnum (diasUteis)>
<qui, TipoEnum (diasUteis)>
<qua, TipoEnum (diasUteis)>
<ter, TipoEnum (diasUteis)>
<seg, TipoEnum (diasUteis)>
<x, TipoInteiro>
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
<y, TipoString>
<mar, TipoEnum (primTrimestre)>
<fev, TipoEnum (primTrimestre)>
<jan, TipoEnum (primTrimestre)>
![Page 22: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/22.jpg)
Pilha de compilação
Pilha de compilação Map auxiliar
<sex, TipoEnum (diasUteis)>
<qui, TipoEnum (diasUteis)>
<qua, TipoEnum (diasUteis)>
<ter, TipoEnum (diasUteis)>
<seg, TipoEnum (diasUteis)>
<x, TipoInteiro>
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
<y, TipoString>
<mar, TipoEnum (primTrimestre)>
<fev, TipoEnum (primTrimestre)>
<jan, TipoEnum (primTrimestre)>
<y, TipoString>
<mar, TipoEnum (primTrimestre)>
<fev, TipoEnum (primTrimestre)>
<jan, TipoEnum (primTrimestre)>
![Page 23: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/23.jpg)
Pilha de Execuçãolet var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in
let type primTrimestre = {jan, fev, mar}, var y = "e"
in next(seg)
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilhas de execução Maps auxiliares
![Page 24: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/24.jpg)
Pilha de Execução
<x, ValorInteiro(1)>
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilhas de execução Maps auxiliar
![Page 25: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/25.jpg)
Pilha de Execução
<sex, ValorEnum (sex, 4, Tipo(diasUteis))>
<qui, ValorEnum (qui, 3, Tipo(diasUteis))>
<qua, ValorEnum (qua, 2, Tipo(diasUteis))>
<ter, ValorEnum (ter, 1, Tipo(diasUteis))>
<seg, ValorEnum (seg, 0, Tipo(diasUteis))>
<x, ValorInteiro(1)>
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilhas de execução Maps auxiliares
<diasUteis, [seg, ter, qua, qui, sex]>
![Page 26: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/26.jpg)
Pilha de Execuçãolet var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in
let type primTrimestre = {jan, fev, mar}, var y = "e"
in next(seg)
Pilhas de execução Maps auxiliar
<sex, ValorEnum (sex, 4, Tipo(diasUteis))>
<qui, ValorEnum (qui, 3, Tipo(diasUteis))>
<qua, ValorEnum (qua, 2, Tipo(diasUteis))>
<ter, ValorEnum (ter, 1, Tipo(diasUteis))>
<seg, ValorEnum (seg, 0, Tipo(diasUteis))>
<x, ValorInteiro(1)>
<diasUteis, [seg, ter, qua, qui, sex]>
![Page 27: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/27.jpg)
Pilha de Execuçãolet var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in
let type primTrimestre = {jan, fev, mar}, var y = "e"
in next(seg)
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilhas de execução Maps auxiliar
<sex, ValorEnum (sex, 4, Tipo(diasUteis))>
<qui, ValorEnum (qui, 3, Tipo(diasUteis))>
<qua, ValorEnum (qua, 2, Tipo(diasUteis))>
<ter, ValorEnum (ter, 1, Tipo(diasUteis))>
<seg, ValorEnum (seg, 0, Tipo(diasUteis))>
<x, ValorInteiro(1)>
<diasUteis, [seg, ter, qua, qui, sex]>
<mar, ValorEnum(mar, 2, Tipo(primTrimestre))>
<fev, ValorEnum(fev, 1, Tipo(primTrimestre))>
<jan, ValorEnum(jan, 0, Tipo(primTrimestre))>
<primTrimestre, [jan, fev, mar]>
![Page 28: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/28.jpg)
Pilha de Execuçãolet var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in
let type primTrimestre = {jan, fev, mar}, var y = "e"
in next(seg)
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilhas de execução Maps auxiliar
<sex, ValorEnum (sex, 4, Tipo(diasUteis))>
<qui, ValorEnum (qui, 3, Tipo(diasUteis))>
<qua, ValorEnum (qua, 2, Tipo(diasUteis))>
<ter, ValorEnum (ter, 1, Tipo(diasUteis))>
<seg, ValorEnum (seg, 0, Tipo(diasUteis))>
<x, ValorInteiro(1)>
<diasUteis, [seg, ter, qua, qui, sex]>
<y, ValorString(“e”)>
<mar, ValorEnum(mar, 2, Tipo(primTrimestre))>
<fev, ValorEnum(fev, 1, Tipo(primTrimestre))>
<jan, ValorEnum(jan, 0, Tipo(primTrimestre))>
<primTrimestre, [jan, fev, mar]>
![Page 29: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/29.jpg)
Pilha de Execuçãolet var x = 1, type diasUteis = {seg, ter, qua, qui, sex} in
let type primTrimestre = {jan, fev, mar}, var y = "e"
in next(seg)
let var x = 1, type diasUteis = {seg, ter, qua, qui, sex} inlet type primTrimestre = {jan, fev, mar}, var y =
"e" in next(seg)
Pilhas de execução Maps auxiliar
<sex, ValorEnum (sex, 4, Tipo(diasUteis))>
<qui, ValorEnum (qui, 3, Tipo(diasUteis))>
<qua, ValorEnum (qua, 2, Tipo(diasUteis))>
<ter, ValorEnum (ter, 1, Tipo(diasUteis))>
<seg, ValorEnum (seg, 0, Tipo(diasUteis))>
<x, ValorInteiro(1)>
<diasUteis, [seg, ter, qua, qui, sex]>
<primTrimestre, [jan, fev, mar]>
<y, ValorString(“e”)>
<mar, ValorEnum(mar, 2, Tipo(primTrimestre))>
<fev, ValorEnum(fev, 1, Tipo(primTrimestre))>
<jan, ValorEnum(jan, 0, Tipo(primTrimestre))>
![Page 30: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/30.jpg)
Pilha de Execução
Pilhas de execução
<sex, ValorEnum (sex, 4, Tipo(diasUteis))>
<qui, ValorEnum (qui, 3, Tipo(diasUteis))>
<qua, ValorEnum (qua, 2, Tipo(diasUteis))>
<ter, ValorEnum (ter, 1, Tipo(diasUteis))>
<seg, ValorEnum (seg, 0, Tipo(diasUteis))>
<x, ValorInteiro(1)><diasUteis, [jan, fev, mar]>
<y, ValorString(“e”)>
<mar, ValorEnum(mar, 2, Tipo(primTrimestre))>
<fev, ValorEnum(fev, 1, Tipo(primTrimestre))>
<jan, ValorEnum(jan, 0, Tipo(primTrimestre))>
<diasUteis, [jan, fev, mar]>
![Page 31: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/31.jpg)
BNF ValorConcreto ::= ValorInteiro | ValorBooleano
| ValorString | ValorLista | ValorEnum ExpUnaria ::= "-" Expressao | "not" Expressao
| "length" Expressao | "ord" Expressao | "next" Expressao | "previous" Expressao
| head(Expressao) | tail(Expressao) | ExpCompreensaoLista
![Page 32: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/32.jpg)
BNF DeclaracaoFuncional ::= DecVariavel
| DecTipo| DecFuncao| DeclaracaoFuncional "," DeclaracaoFuncional
DecTipo ::= "type" Id "=" "{" SeqEnum "}"
SeqEnum ::= ValorEnum | ValorEnum "," SeqEnum
![Page 33: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/33.jpg)
Parser - Tokens < TYPE : "type"> < NEXT : "next" > < PREVIOUS : "previous" > < ORD : "ord" >
![Page 34: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/34.jpg)
Parser - PDeclType()DeclaracaoFuncional PDeclType() :{
Id tipo;SeqEnum seqEnum;
}{
( <TYPE> tipo = PId() <ASSIGN> <LBRACE> seqEnum = PSeqEnum(tipo.toString()) <RBRACE>)
{return new DecType(tipo, seqEnum);
}}
![Page 35: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/35.jpg)
Parser - PSeqEnumSeqEnum PSeqEnum(String tipo) :{
ValorEnum valEnum;List lista = null;int index = 0;
}{
(valEnum = PValorEnum(tipo, index++) {
lista = new ArrayList();lista.add(valEnum);
}( <COMMA> valEnum = PValorEnum(tipo, index++){
lista.add(valEnum);})*
){
return new SeqEnum(lista);}
}
![Page 36: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/36.jpg)
Parser - PValorEnumValorEnum PValorEnum(String str, int index) : {
Token token;}{
token = <IDENTIFIER>{
String tokenStr = token.toString();return new ValorEnum(new Id(tokenStr), str, index);
}}
![Page 37: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/37.jpg)
Parser - OperaçõesExpressao PExpNext() :{
Expressao retorno;}{
<NEXT> retorno = PExpPrimaria(){
return new ExpNext(retorno);}
}
Expressao PExpPrevious() :{
Expressao retorno;}{
<PREVIOUS> retorno = PExpPrimaria(){
return new ExpPrevious(retorno);}
}
Expressao PExpOrd() :{
Expressao retorno;}{
<ORD> retorno = PExpPrimaria(){
return new ExpOrd(retorno);}
}
![Page 38: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/38.jpg)
Implementação Classes novas
DecType SeqEnum ValorEnum TipoEnum ExpOperacoesEnum• ExpNext• ExpPrevious• ExpOrd
![Page 39: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/39.jpg)
Implementação Modificações em classes/interfaces
AmbienteFuncional<DefFuncao, DecType>• AmbienteExecucaoFuncional
– ContextoExecucaoFuncional
![Page 40: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/40.jpg)
Implementação Modificações em métodos
ExpDeclaracao• avaliar• includeBindings• resolveBindings• resolveTypeBidings
![Page 41: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/41.jpg)
Projeto – Parte 2
![Page 42: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/42.jpg)
Projeto (parte 2) Estender a LF3 com características de Haskell Definição de tipos (estender a LF3)
Tipos enumerados Tipos complexos Tipos recursivos
![Page 43: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/43.jpg)
Dúvidas/decisões de projetoPara finalizar...
![Page 44: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/44.jpg)
Dúvidas/decisões de projeto Como declarar tipos recursivos em uma
linguagem não tipada? Uma pilha auxiliar para as estruturas foi a
melhor decisão? Como dar “apelidos” para tipos se eles não
são explícitos?
![Page 45: Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.](https://reader035.fdocumentos.tips/reader035/viewer/2022062312/552fc130497959413d8d4eec/html5/thumbnails/45.jpg)
Referências Programming Language Concepts and
Paradigms - David A. Watt Programming language processors in Java -
David A. Watt e Deryck F. Brown http://www.cin.ufpe.br/~if708 http://www.haskell.org/tutorial/goodies.html