final presentation of proposal language

43
INTRODUC ¸˜ AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM OGICA Projeto de especificac ¸˜ ao da linguagem C+- Caio Santos, Gabriel Valsiljevic, Jean Silva, Victor Henrique Universidade Federal do Rio Grande do Norte Centro de Ciˆ encias Exatas e da Terra Departamento de Inform´ atica e Matem´ atica Aplicada 4 de junho de 2013 1/40

Upload: jean-silva

Post on 25-Dec-2014

63 views

Category:

Documents


0 download

DESCRIPTION

Final presentation of proposal language

TRANSCRIPT

Page 1: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

Projeto de especificacao da linguagem C+-

Caio Santos, Gabriel Valsiljevic, Jean Silva, Victor HenriqueUniversidade Federal do Rio Grande do Norte

Centro de Ciencias Exatas e da TerraDepartamento de Informatica e Matematica Aplicada

4 de junho de 2013

1/40

Page 2: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

CONTEUDOINTRODUCAO

LINGUAGEM IMPERATIVADomınio de AplicacaoPrincipais caracterısticasSistema de TiposTipos PrimitivosDesignadores dos tipos primitivosTipos compostosExpressoes da LinguagemEntrada e SaıdaEstruturas de Controle

LINGUAGEM FUNCIONALDiferencas marcantes do paradigma imperativoSistema de TiposExpressoes da LinguagemEscopo e Tempo de VidaArraysEstruturas de controle

LINGUAGEM LOGICADiferencas marcantes do paradigma imperativoTiposEscopoOperadores e expressoesArmazenamento de valoresArraysEstruturas de controle

2/40

Page 3: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

DOMINIO DE APLICACAO

I Linguagem baseada em C e FORTRANI Domınio de aplicacao cientıfico

I Estruturas de dados simplesI Manipulacao de grandes quantidades de dadosI Alta precisao

I Publico alvoI Matematicos e cientistas

3/40

Page 4: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

PRINCIPAIS CARACTERISTICAS

I LegibilidadeI Pequeno numero de componentes basicos (simplicidade

global)I Nomes (designadores) dos tipos primitivos refletem bem

suas finalidades. Ex.: int ≡ inteiroI E case sensitve

I ConfiabilidadeI E fortemente tipadaI Oferece mecanismos de tratamento de excecoes

I Capacidade de escritaI E pouca ortogonal

I Sistema de implementacao: compiladaI Usa compilacao separada

4/40

Page 5: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

SISTEMA DE TIPOS

I A linguagem e fortemente tipadaI Compatibilidade entre tipos

I Compatibilidade de nomes e estruturas serao usados

5/40

Page 6: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS PRIMITIVOS

Tabela: Designadores dos tipos primitivos da linguagem

Nome Descricao Tamanho Faixachar Caractere 1byte −128 a 127 e unsigned: 0 a 255short Inteiro curto 2bytes −32768 a 32767 e unsigned: 0 a 65535

int Inteiro 4bytes −2147483648 a 2147483647 e unsigned: 0a 4294967295

long Inteiro longo 8bytes −263 a 263 − 1 e unsigned: 0 a 264 − 1bigInt Inteiro muito longo 16bytes −2127 a 2127 − 1 e unsigned: 0 a 2128 − 1bool Valor booleano. 1byte true ou falsefloat Pronto flutuante 4bytes ±3.4e ± 38

double Precisao dupla doponto flutuante

8bytes ±1.7e ± 308

complex Numeros comple-xos

8bytes −264 a 264 − 1

6/40

Page 7: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS COMPOSTOS

I Conjunto (Set)1 import utility.set;2 ...3 set <int> A;4 set < set <int> > B;5 B.add(A);6 /**7 * $B \supset A$8 */

I Lista (List)1 import utility.list;2 ...3 list <int> a;4 list < list <int> > b;

7/40

Page 8: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS COMPOSTOS

I Conjunto (Set)1 import utility.set;2 ...3 set <int> A;4 set < set <int> > B;5 B.add(A);6 /**7 * $B \supset A$8 */

I Lista (List)1 import utility.list;2 ...3 list <int> a;4 list < list <int> > b;

7/40

Page 9: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS COMPOSTOS

I Pilha (Stack)1 import utility.stack2 ...3 stack <int> mystack;4 mystack.push(5);5 mystack.push(4);6 mystack.push(3);7 mystack.pop();8 write("%d\n", mystack.top());

I Fila (Queue)1 import utility.queque;2 ...3 queue f<int> myqueue;4 myqueue.push_back(8);5 myqueue.push_back(7);6 write("front: %d; back: %d\n", myqueue.front(), myqueue.back());7 myqueue.pop_front();

8/40

Page 10: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS COMPOSTOS

I Pilha (Stack)1 import utility.stack2 ...3 stack <int> mystack;4 mystack.push(5);5 mystack.push(4);6 mystack.push(3);7 mystack.pop();8 write("%d\n", mystack.top());

I Fila (Queue)1 import utility.queque;2 ...3 queue f<int> myqueue;4 myqueue.push_back(8);5 myqueue.push_back(7);6 write("front: %d; back: %d\n", myqueue.front(), myqueue.back());7 myqueue.pop_front();

8/40

Page 11: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS COMPOSTOS

I Vetor1 int v[10];2 int vet[3] = {1, 2, 3};3 int mat[2][2] = {1, 0;4 0, 1};

I O usuario pode desejar definir seus proprios tipos1 struct ListaT {2 int info;3 ListaT * prox;4 };5 ...

9/40

Page 12: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS COMPOSTOS

I Vetor1 int v[10];2 int vet[3] = {1, 2, 3};3 int mat[2][2] = {1, 0;4 0, 1};

I O usuario pode desejar definir seus proprios tipos1 struct ListaT {2 int info;3 ListaT * prox;4 };5 ...

9/40

Page 13: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

EXPRESSOES DA LINGUAGEM

Operador DescricaoOperadores Aritimeticos

+ adicao- subtracao* multiplicacao/ divisao% mod ou resto de divisao

Incremento e Decremento++ incremento– decremento

Operadores Relacionais== Igualdade!= Diferenca

>, < maior que, e menor que>=, <= maior igual, e menor igual

10/40

Page 14: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

EXPRESSOES DA LINGUAGEM

Operador DescricaoOperadores Logicos

! NOT&& AND|| OR

Operadores bit-a-bit& AND| ORˆ XOR˜ NOT

11/40

Page 15: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS DEFINIDOS PELO USUARIO

Definicao1 template <typedef struct T>2 typedef struct Par {3 T a, b;4 };5

6 template <typedef struct T>7 function getMax (Par <T> p ) : T {8 return p.a > p.b ? p.a : p.b;9 }

Uso1 Par <double> p;2 p.a = 5.5, p.b = 5.4;3 write("%lf", getMax(p));

12/40

Page 16: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ENTRADA E SAIDA

1 import io;2

3 function main(): int {4 int a, b;5 read("%i %i", &a, &b);6 int soma = a + b;7 write("%i\n", soma);8 return 0;9 }

13/40

Page 17: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLECONDICIONAL: COMANDO IF

1 import io;2

3 function main(): int {4 int n;5 read("%d", &n);6 if (n > 0) {7 write("%d eh um numero positivo\n", n);8 } else if(n < 0){9 write("%d eh um numero negativo\n", n);

10 } else {11 write("%d eh zero\n", n);12 }13 return 0;14 }

14/40

Page 18: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLECONDICIONAL: COMANDO SWITCH-CASE

1 import io;2

3 function main(): int {4 string op;5 read("%s", &op);6 switch(op) {7 case "um":8 write("1\n");9 break;

10 case "dois":11 write("2\n");12 break;13 case "tres":14 write("3\n");15 break;16 default:17 write("qwerty\n");18 break;19 }20 return 0;21 }

15/40

Page 19: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLEREPETICAO: COMANDO FOR

1 import io;2

3 function main(): int {4 int n;5 read("%d", &n);6 for (int i = 0; i < n; i++) {7 write("%d ", 2 * (i + 1));8 }9 write("\n");

10 return 0;11 }

16/40

Page 20: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLEREPETICAO: COMANDO FOR-EACH

1 import io;2 import utility.list;3

4 function main(): int {5 list <int> lst;6 lst.add(0);7 lst.add(2);8 lst.add(3);9 lst.add(4);

10

11 foreach (int a : lst) {12 write("%d ", a);13 }14 write("\n");15 return 0;16 }

17/40

Page 21: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLEREPETICAO: COMANDO WHILE

1 import io;2

3 function main(): int {4 int n;5 read("%d", &n);6 int i = 0;7 while(i < n) {8 ++i;9 write("%d ", 2 * i);

10 }11 write("\n");12 return 0;13 }

18/40

Page 22: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLEREPETICAO: COMANDO DO-WHILE

1 import io;2

3 function main(): int {4 int i = 5;5 do {6 write("%d ", i);7 i--;8 } while (i != 0);9 write("\n");

10 return 0;11 }

19/40

Page 23: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLETRATAMENTO DE EXCECOES

1 procedure g() {2 int x;3 write("Digite um numero positivo: \n");4 try {5 read(x);6 if(x < 0){7 throw x;8 }9 } catch(int erro) {

10 write("Erro! numero negativo: %i \n", erro);11 }12 }

20/40

Page 24: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

SUBPROGRAMAS

1 function fib(int n): int {2 if (n == 0 || n == 1) return n;3 else4 return fib(n - 1) + fib(n - 2);5 }

1 procedure printTest() {2 write("Opa...aprendi C+-!");3 }

21/40

Page 25: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

LINGUAGEM FUNCIONALDIFERENCAS MARCANTES DO PARADIGMA IMPERATIVO

I Linguagems de programacao funcional tratamcomputacoes como avaliacoes matematicas.

I Nao usa variaveis ou instrucoes de atribuicao.I Programas sao definicoes e aplicacoes de funcoes.I Simplificacao da semantica.

22/40

Page 26: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

SISTEMA DE TIPOS

I Praticamente todos os tipos primitivos permanecerao.I Os tipos compotos serao representados pela tupla.

23/40

Page 27: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

EXPRESSOES DA LINGUAGEM

I Os operadores aritmeticos permanecem da mesma forma.I O incremento e decremento serao definidos como funcoes

primitivas.

1 (int, float, string)

24/40

Page 28: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESCOPO E TEMPO DE VIDA

I Comportamento de funcoes matematicas.I Escopo das variaveis e estatico.I Seu resultado nao deve ser afetado pelo contexto em que a

funcao foi chamada.

25/40

Page 29: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ARRAYS

I Arrays foram substituidos por Listas.I Avaliacao preguicosa, evita calculos desnecessarios e

permite construir estruturas infinitas.

26/40

Page 30: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLE

I As estruturas condicionais se resumem em uma mescla docomportamento do switch-case com a avaliacao decondicoes de guarda do if.

I Estruturas de repeticao interativas deixaram de existir.I Alteradores de fluxo (jumps e escapes) tambem serao

eliminados.

27/40

Page 31: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLE

1 //Exemplo Imperativo2 function ehPrimo(int n) : bool {3 int i=2;4 while(i*i){5 if(i%n==0) return false;6 i++;7 }8 return true;9 }

10

11 //Exemplo Funcional12 function ehPrimo n : int -> bool13 ehPrimoAux(2,n)14

15 function ehPrimoAux i, n : int, int16 {i*i>n, true}17 {i%n == 0, false}18 ehPrimoAux i+1, n

28/40

Page 32: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

LINGUAGEM LOGICADIFERENCAS MARCANTES DO PARADIGMA IMPERATIVO

I Trabalha com regras e fatosI Variaveis nao sao blocos de memoriaI O programador se preocupa em descrever o problema, e

nao sua solucaoI Utiliza backtracking para tentar unificar as variaveis

29/40

Page 33: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS PRIMITIVOS

I Nao havera ponteirosI Nao existirao blocos de memoria visıveis ao programador

I unsigned e string serao substituıdos por symbol

30/40

Page 34: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

TIPOS COMPOSTOS

I Usuarios poderao definir predicados compostosI Exemplo:#predicado simplesgosta(gabriel, lpcp).

#predicado compostogosta(gabriel, disciplina(lpcp)).

31/40

Page 35: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESCOPO

I Fatos sao visıveis globalmenteI Variaveis sao visıveis apenas dentro da regra onde estao

instanciadas

32/40

Page 36: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

OPERADORES E EXPRESSOES

I Operadores aritmeticos e logicos permanecem inalteradosI Excecao: operador ‘=’ e utilizado para unificacao, apenasI Utiliza-se ‘is’ para atribuicaoI Exemplo:tenta_unificar(X,Y) :- X = Y.atribuir(X, Y) :- X is Y + 3.

33/40

Page 37: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ARMAZENAMENTO DE VALORES

I Fatos sao armazenados em modelo estaticoI Variaveis sao armazenadas em modelo dinamico em pilha

I Devido ao seu uso no backtracking, cujo comportamento erecursivo

34/40

Page 38: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ARRAYS

I Definidos como listas ligadasI Representadas como [H|T]

I H e o primeiro elemento da lista e T seu restante (e.g.:[1, 2, 3] seria [1|[2, 3]])

I Exemplos:somatorio([], 0).somatorio([H|T], X) :- somatorio(T, Y), X is H + Y.

35/40

Page 39: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

ESTRUTURAS DE CONTROLE

I Nao existirao estruturas de controle e fluxo como if-else ewhile

I Para utilizar estes recursos, deve-se utilizar metodoslogicos e recursao

I Comando “!” (cut) utilizado para interromper o processode resolucao e impedir lacos infinitos

36/40

Page 40: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

EXEMPLO DE PROGRAMA

#numero de elementos de uma listanum_elements([], 0).num_elements([_|T], X) :- num_elements(T, Y), X is 1 + Y.

37/40

Page 41: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

EXEMPLO DE PROGRAMA

# alguns fatosprogenitor(joao, mario).progenitor(helena, carlos).progenitor(mario, carlos).sexo(jose, ’masculino’).sexo(joao, ’masculino’).sexo(maria, ’feminino’).sexo(ana, ’feminino’).

38/40

Page 42: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

EXEMPLO DE PROGRAMA

# diversas relacoes de parentescoirma(X, Y) :- sexo(X, ’feminino’), progenitor(Z, X), progenitor(Z, Y).irmao(X, Y) :- sexo(X, ’masculino’), progenitor(Z, X),progenitor(Z, Y).mae(X, Y) :- sexo(X, ’feminino’), progenitor(X, Y).pai(X, Y) :- sexo(X, ’masculino’), progenitor(X, Y).avo(X, Y) :- sexo(X, ’masculino’), progenitor(X, Z), progenitor(Z, Y).tio(X, Y) :- irmao(X, Z), progenitor(Z, Y).

descendente(X, Y) :- progenitor(Y, X).descendente(X, Y) :- progenitor(Y, Z), descendente(X, Z).

39/40

Page 43: Final presentation of proposal language

INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA

FIMDuvidas?

40/40