A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres.

Apresentações semelhantes


Apresentação em tema: "1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres."— Transcrição da apresentação:

1 1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres

2 2 Ponteiros e Procedimentos de alta ordem em Linguagem Imperativa 2

3 Versões: Ponteiros com aritmética (LI2P1) Ponteiros sem aritmética + Procedimentos de alta ordem (LI2P2)

4 Gramática LI2PI Atribuicao ::= Id ":=" Expressao | “*” Id ":=" Expressao ExpUnaria ::= … | “*” Expressao | “&” Id DeclaracaoVariavel ::= "var" Id "=" Expressao | “var *” Id = Expressao Note: Observe que o operador “*” é seguido de uma expressão, desta forma, é dereferenciar uma expressão, esta decisão de projeto habilita aritmética de ponteiros.

5 ContextoExecucaoImperativa Como funciona? 1.Fornece uma implementação para interface Ambiente 2.Faz um mapeamento direto entre identificadores e valores O que mudamos? 1.Reestruturamos o mapeamento entre identificadores e valores, para torná-lo mais concreto, mapeando identificadores em endereços e endereços em valores.

6 ContextoExecucaoImperativa Preservamos a assinatura dos métodos incrementa() : void restaura() : void map(idArg : Id, valorId : T) : void get(idArg : Id) : T Adicionamos novos métodos getAddress(idArg : Id) : Integer getValue (adress : Integer) : T proximoEndereco() : Integer

7 ContextoExecuçãoImperativa { var a = 33, var b = “PLP”, var c = true, var *p = &a } Implementação LI2P1 Ponteiros não possuem tipo especifico.

8 ContextoExecuçãoImperativa { var a = 33, var b = “PLP”, var c = true, var *p = &a } Implementação LI2P2 Ponteiros não possuem tipo especifico.

9 Gramática LI2P2 Atribuicao ::= Id ":=" Expressao | “*” Id ":=" Expressao ExpUnaria ::= … | “*” Id | “&” Id DeclaracaoVariavel ::= "var" Id "=" Expressao | “var *” Id = Expressao Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato ::= ValorProcedimento ValorProcedimento = “pc” “(“ ListaDeclaracaoParametro “)” “{“ Comando “}” Tipo ::= … | “ptrstr” | “ptrint” | “ptrbool” | “ ” ListaTipo ::= Tipo | Tipo, ListaTipo

10 Ponteiros passam a ter tipos internos: PTRINTEIRO, PTRBOOLEANO, PTRSTRING; Ao ocorrer uma atribuição ao local apontado por um ponteiro, é verificado se o tipo do local apontado é compatível com o tipo da expressão r-value (lvalue := rvalue); Operadores binários podem verificar se os tipos dos operandos estão de acordo com os tipos esperados (ex: *a+*b, *a and *b); Eliminamos a possibilidade de definir ponteiros para ponteiros e fazer aritmética de ponteiros.

11 Procedimentos de alta ordem (LI2P2)

12 Na Linguagem Imperativa 2 (LI2), procedimentos não possuem status de valor, desta forma, não podem ser atribuídos à variáveis nem ser passados como parâmetros. Na LI2P2 procedimentos passam a ser um valores O ContextoExecucaoImperativa2 em LI2P2 só possui o mapeamento de identificadores em valores. O mapeamento de identificadores em procedimentos foi eliminado. Um programa é um comando

13 Como expressar o tipo de um procedimento? Tipo ::= … | “ptrstr” | “ptrint” | “ptrbool” | “ ” ListaTipo ::= Tipo | Tipo, ListaTipo Exemplo: proc somaCondicional (int a, int b, boolean c) { if c == true then write (a+b) else skip }; TIPO (somaCondicional) =

14 Todos na torcida!! Validação dos interpretadores. Parte 1: Ponteiros sem aritmética Parte 2: Ponteiros com aritmética + Procedimento de alta ordem


Carregar ppt "1 Diego Machado Dias Rodrigo Cézar Luna dos Santos Weslley Silva Torres."

Apresentações semelhantes


Anúncios Google