Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # # # # # # # # # # # # # #
- # Linguagens de Programação #
- # Prof. Fernando Pereira #
- # notasdogarcia.blog.com #
- # # # # # # # # # # # # # #
- Hoje falaremos sobre a semântica de linguagens de programação.
- Como já vimos na primeira aula do semestre, uma linguagem de programação pode ser descrita em sintaxe e semantica.
- Façamos um interpretador aritimetico.
- Em termos de gramatica:
- <exp> ::= <exp> + <mulexp> | <mulexp>
- <mulexp> ::= <mulexp> * <rootexp> | <rootexp>
- <rootexp> ::= ( <exp> ) | <constant>
- 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.
- // Ou seja gerando a arvore de derivação que já conhecemos.
- Gerando uma arvore de sintaxe Abstrada ASA
- temos:
- +
- / \
- 1 2
- Muito mais simples.
- Em termos de gramática:
- <ast> ::= plus(<ast>, <ast>)
- | times(<ast>,<ast>)
- | const (<const>)
- Agora fazendo isso em prolog teriamos:
- val1 (plus(X,Y), Value) :-
- val1(X, XValue),
- val1(Y,YValue),
- Value is XValue + YValue.
- val1(times(X,Y), Value) :-
- val1(X, XValue),
- val1(Y, YValue),
- Value is XValue * YValue.
- val1(const(X), X).
- Semantica pode ser descrita na forma:
- Dada a expressão:
- if(e1,e2,e3)
- e1 -> true e e2 -> v2
- if(e1,e2,e3) -> v2
- e1 -> false e e3 -> v3
- if(e1,e2,e3) -> v3
- Ou seja, se e1 -> em alguma coisa, então o if implicará em outra.
- Assim eu mostrei o comportamento de um elemento da sintaxe sob os casos esperados.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- // essa aula vai ficar fraca, estou um tanto cansado =P.
- // fim da aula anotei quase nada.
- if(e1,e2,e3,resp) :- e1, resp is e2.
- if(e1,e2,e3,resp) :- resp is e3.
Advertisement
Add Comment
Please, Sign In to add comment