Top Banner
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
43

Final presentation of proposal language

Dec 25, 2014

Download

Documents

Jean Silva

Final presentation of proposal language
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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