VinBR

LP 28/09/2011

Oct 2nd, 2011
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.92 KB | None | 0 0
  1.  
  2. # # # # # # # # # # # # # #
  3. # Linguagens de Programação #
  4. # Prof. Fernando Pereira #
  5. # notasdogarcia.blog.com #
  6. # # # # # # # # # # # # # #
  7.  
  8. Essa aula é uma revisão de toda a materia vista até hoje.
  9.  
  10. Hoje começamos discutindo sobre os dois mundos de linguagens declarativas e imperativas.
  11.  
  12. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  13.  
  14. Sobre gramaticas:
  15. Temos um simbolo de partida
  16. Simbolos terminais
  17. Simbolos nao terminais.
  18. Regras de gramatica.
  19.  
  20. Tem também a arvore de derivação.
  21.  
  22. Como provar se uma arvore é ambigua ou não?
  23. Basta encontrar para uma mesma palavra duas derivações diferentes.
  24.  
  25. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  26.  
  27. Sobre linguagens de programação:
  28. Temos a sintaxe e a semantica, sendo a segunda o significado de cada palavra.
  29.  
  30. Sobre prolog e gramaticas:
  31. lembram da gramatica de a^nb^nc^n que não pode ser expressa por uma gramatica comum?
  32. lembrem que através dos atributos prolog consegue expressar essa linguagem também e se torna turing completo.
  33.  
  34. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  35.  
  36. Sobre tradução e interpretação e compiladores em geral.
  37. Etapas de compilação:
  38. Preprocessamento.
  39. Tradução para assembly.
  40. Tradução para código de máquina.
  41. Então é relizada a linkagem. // Acho que ela ocorre agora, mas pode ocorrer sobre o código assembly.
  42. E então o carregamento.
  43. E apenas por fim a execução.
  44.  
  45. Porque a linguagem de java script é interpretada?
  46. Porque roda em vários computadores simuntaneamente.
  47. E se voce envia o código fonte para ser compilado em cada computador fica lento é melhor
  48. interpretar que é mais barato já que cada programa só sera usado uma vez.
  49.  
  50. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  51.  
  52. Sobre SML
  53. Esses programas de linguagens funcionais usam bastante principios indutivos.
  54. Ou seja, se X é da forma (h::t) então eu opera-se recursivamente para t e retorne uma operação sobre h.
  55. É normalmente esse tipo de raciocinio.
  56.  
  57. Sobre listas pode-se operar de duas formas: hd l ou tl l onde a primeira retorna a cabeça da lista e a segunda a calda.
  58.  
  59. Formas de dados mais basicas: Listas e tuplas.
  60. Toda função em SML só recebe um parametro e um retorno.
  61. Assim tuplas são úteis quando voce deseja receber vários parâmetros ou vários retornos.
  62.  
  63. // O professor ainda que que agente descubra qual algoritimo é prejudicado se for implementado por listas, ao invés de arranjos?
  64. // Ele disse que deve cobrar isso na prova.
  65.  
  66. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  67.  
  68. Casamentos de Padrão em SML:
  69.  
  70. É uma característica muito interessante, pois eu posso decompor um objeto em suas partes mais básicas.
  71. Assim se quero acessar a cabeça de uma lista, eu posso usar a decomposição de padrões para encontrar ela.
  72. ex:
  73. fun f nil = nil
  74. | f (h::t) = h
  75.  
  76. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  77.  
  78. Tipos de dados:
  79.  
  80. Cada tipo é um conjunto de valores juntamente com sua representação e conjunto de operações realizáveis sobre ele.
  81.  
  82. Como criar tipos compostos?
  83. Em SML pode-se usar tuplas.
  84. Em C pode-se usar structs, unions.
  85. Em java temos as classes e assim por diante.
  86.  
  87. Note que unions em C são uniões de dois conjuntos porém elas não são disjuntas.
  88. Em sml quando voce cria um datatype A of int | B of real voce tem 2 tipos disjuntos.
  89.  
  90. Tipagem fraca: é o caso de C que não há verificação dos tipos quando voce faz uma atribuição.
  91. No geral voce pode dar um cast e multiplicar um struct por uma string o que provavelmente daria muito errado.
  92.  
  93. Tipagem forte é o caso de java que em tempo de execução há uma verificação de toda operação ou coersão realizada.
  94.  
  95. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  96.  
  97. Coerção
  98. Porque?
  99. xxx complete isso
  100.  
  101. Construtores de tipos:
  102. Ex: 'a list é um construtor de tipos, ela recebe como parâmetro um tipo chamado 'a e retorna uma lista desse tipo.
  103.  
  104. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  105.  
  106. Variáveis livres e captura de variáveis em calculo lambda.
  107. Se tenho (<l>a (<l>b (a + b)))
  108. Perceba que a é livre dentro das duas expressões mais internas.
  109. Porém se eu colocar como parametro a letra b assim:
  110. (<l>a (<l>b (a + b)))b
  111. e substituir:
  112. (<l>b (b + b))
  113. Agora a variável que antes era a tornou presa à b. ou seja foi capturada.
  114. isso deve ser evitado. mudando-se o nome do parâmetro quando ocorrer esse problema.
  115.  
  116. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  117.  
  118. Escopos e espaços de nomes.
  119. Um escopo é uma região onde um conjunto de nomes e rotulos são referenciáveis.
  120.  
  121. Espaços de nomes podem ser classes em C++, namespaces em C++.
  122.  
  123. Escopo estatico é calculado durante a compilação.
  124. Quase todas nossas linguagens de programação hoje são desse tipo.
  125.  
  126. Escopo dinâmico é quando uma variável livre declarada em uma função muda dependendo do contexto onde a função for usada.
  127.  
  128. Ex: se tenho uma variável one =1 dentro do escopo onde declarei a funçào, e tenho outra variável one=2 no local onde a função foi chamada.
  129. Se o comportamento da funçào utilizar a nova variável one=2 ao invés da antiga, ocorrerá um comportamento bem inesperado para quem tem costume
  130. com as linguagens atuais. e esse caso é chamado de escopo dinamico.
  131. Caso contrario é o escopo estático.
  132.  
  133. Note que as macros de C++ possuem escopo dinâmico, e deve-se tomar cuidado com isso pois pode dar merda se voce ficar desatento.
  134.  
  135. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  136.  
  137. Como criar um tipo arvore?
  138. crie um construtor de tipos:
  139.  
  140. datatype 'a tree = Empty | Node of 'a tree * 'a * 'a tree
  141. E pronto declaramos uma arvore de tipo generico.
  142.  
  143. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  144.  
  145. Registro de ativação.
  146. Um registro de ativação é o conjunto de dados que ficam armazenados durante o tempo de vida de uma função.
  147. Registros estaticos reservam o espaço de armazenamento em tempo de compilação.
  148. Registros dinâmicos reservam esse espaço em tempo de execução. E usam portanto uma pilha de registros de ativação.
  149. Assim quando uma função retorna, ela retorna para o ultimo registro da pilha.
  150. e assim recursivamente até que o registro de main retorne e o programa se encerre.
  151.  
  152. Agora voltando a falar das variáveis livres.
  153. Como encontrar a definição original de uma variável livre?
  154. Se eu procurar sua definição na pilha de registros de ativação, eu vou possuir escopo dinâmico. Mas isso é confuso e preferivelmente evitavel.
  155.  
  156. // Bem fim da aula =],
Advertisement
Add Comment
Please, Sign In to add comment