VinBR

LP 21/11/2011

Nov 29th, 2011
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1.  
  2. # # # # # # # # # # # # # #
  3. # Linguagens de Programação #
  4. # Prof. Fernando Pereira #
  5. # notasdogarcia.blog.com #
  6. # # # # # # # # # # # # # #
  7.  
  8. Hoje falaremos sobre a semântica de linguagens de programação.
  9.  
  10. Como já vimos na primeira aula do semestre, uma linguagem de programação pode ser descrita em sintaxe e semantica.
  11.  
  12. Façamos um interpretador aritimetico.
  13. Em termos de gramatica:
  14.  
  15. <exp> ::= <exp> + <mulexp> | <mulexp>
  16. <mulexp> ::= <mulexp> * <rootexp> | <rootexp>
  17. <rootexp> ::= ( <exp> ) | <constant>
  18.  
  19. Gerando uma arvore de sintaxe Concreta para a expressão 1 + 2, teremos um total de 4 nós uma raíz e tres folhas.
  20. // Ou seja gerando a arvore de derivação que já conhecemos.
  21.  
  22. Gerando uma arvore de sintaxe Abstrada ASA
  23.  
  24. temos:
  25.  
  26. +
  27. / \
  28. 1 2
  29.  
  30. Muito mais simples.
  31.  
  32. Em termos de gramática:
  33.  
  34. <ast> ::= plus(<ast>, <ast>)
  35. | times(<ast>,<ast>)
  36. | const (<const>)
  37.  
  38. Agora fazendo isso em prolog teriamos:
  39.  
  40. val1 (plus(X,Y), Value) :-
  41. val1(X, XValue),
  42. val1(Y,YValue),
  43. Value is XValue + YValue.
  44.  
  45. val1(times(X,Y), Value) :-
  46. val1(X, XValue),
  47. val1(Y, YValue),
  48. Value is XValue * YValue.
  49.  
  50. val1(const(X), X).
  51.  
  52. Semantica pode ser descrita na forma:
  53.  
  54. Dada a expressão:
  55. if(e1,e2,e3)
  56.  
  57. e1 -> true e e2 -> v2
  58. if(e1,e2,e3) -> v2
  59.  
  60. e1 -> false e e3 -> v3
  61. if(e1,e2,e3) -> v3
  62.  
  63. Ou seja, se e1 -> em alguma coisa, então o if implicará em outra.
  64. Assim eu mostrei o comportamento de um elemento da sintaxe sob os casos esperados.
  65.  
  66. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  67.  
  68. // essa aula vai ficar fraca, estou um tanto cansado =P.
  69.  
  70. // fim da aula anotei quase nada.
  71.  
  72. if(e1,e2,e3,resp) :- e1, resp is e2.
  73. if(e1,e2,e3,resp) :- resp is e3.
Advertisement
Add Comment
Please, Sign In to add comment