Vous êtes sur la page 1sur 44

Paradigmas de Linguagens de

Programação

Profa. Laís do Nascimento Salvador


laisns@dcc.ufba.br

Baseado no slides do livro Conceitos de Linguagens de Programação


(Sebesta) e nos slides do Prof. Manoel Gomes de Mendonça Neto
Parte 1 - Introdução às
Linguagens de Programação
Introdução
• O que é uma linguagem?

• O que é uma linguagem de Programação?


Sintaxe X Semântica
• Sintaxe
– forma ou estrutura de • Exemplo
expressões, comandos e
unidades de programa
if ‘(‘ <expr> ‘)’ <stat>

• Semântica
– significado de
expressões, comandos e
unidades de programa Se o valor de <expr> for
verdadeiro, o comando
<stat> é executado
Descrição de Linguagens
Conceitos Básicos
• Linguagem: conjunto de cadeias de
caracteres definidas a partir de um alfabeto
Σ
– Ex.: Σ = {a,b}
• L(Σ ) = {aa, bb, aaaa, abba, baab, bbbb, aaaaaa,
aabbaa, abaaba, abbbba, …}
• Regras Sintáticas
– especificam as cadeias de caracteres formadas a
partir Σ que pertencem a linguagem
• sentenças válidas
– Ex.: L  aa L  bb L  aLa L  bL
Descrição de Linguagens
Conceitos Básicos
• Lexemas
– cadeias de caracteres que correspondem a unidades
básicas de uma linguagem
– Ex.: C
• if, then, function, minhaFuncao, +, *, “string”, 500, …
• Tokens
– categorias de lexemas de uma linguagem
– Ex.: C
• palavras reservadas, identificadores, símbolos, literais, …
Conceitos Básicos
• token, lexema, padrão

token le
const const
Conceitos Básicos
• reconhecedor de linguagem
– “mecanismo” que lê cadeias de caracteres e
determina se são sentenças válidas de uma
linguagem ou não.
– Ex.: autômatos
• gerador de linguagem
– “dispositivo” que gera sentenças válidas de uma
linguagem
– Ex.: gramáticas
Descrição de Sintaxe
Expressões Regulares e Gramáticas Livres de Contexto

• Expressões regulares descrevem


formalmente os padrões dos tokens de uma
linguagem

• Gramáticas livres de contexto descrevem a


forma de sentenças válidas de uma
linguagem
Expressões Regulares
• Exemplo: identificadores da linguagem Pascal

letra A | B | ... | Z | a | ...alternativa


|z
digito 0 | 1 | ... | 9
identificador letra .(letra | digito)*
concatenação

identificador
descreve cadeias de letras e dígitos de comprimento
maior ou igual a 1, que sempre começam com uma letra
seguida por zero ou mais letras ou dígitos decimais
Gramáticas Livres de Contexto
• descrevem a sintaxe de linguagens de
programação
• grande importância teórica e prática no
contexto de definição de linguagens de
programação e de construção de compiladores
[N. Chomsky]

– facilidade de representação das construções das


linguagens, especialmente as recursivas
– formalização da análise sintática
– simplificação do processo de tradução de
linguagens de programação
GLCs
Exemplo
a) Descrição de expressões aritméticas com
número arbitrário de parênteses aninhados

expr  expr '+' expr


expr  expr '*' expr
expr  '(' expr ')'
expr  identificador
expr  constante_numérica
GLCs
Exemplo
a) Descrição de estruturas de bloco (begin..end,
etc.)

cmd_composto  BEGIN seq_cmds END


seq_cmds  comando
seq_cmds  seq_cmds ';' comando
comando  rotulo ':' cmd_sem_rotulo
comando  cmd_sem_rotulo
rotulo  constante_numerica
Backus-Naur Form (BNF)
• BNF é uma notação simples e natural para
descrição de sintaxe, parecida com GLCs
• BNF é uma metalinguagem
• A notação BNF usa regras de produção (ou
produções, ou regras de reescrita).
regra de produção

lado esquerdo lado direito

<programa>  begin <stmt_list> end


símbolo não-terminal símbolo terminal
Gramáticas e Derivações
<programa>  begin <stmt_list> end • derivação
<stmt_list>  <stmt> – geração de sentenças de
<stmt_list>  <stmt> ; <stmt_list> uma linguagem a partir
<stmt>  <var> = <expression> da seleção e aplicação
<var>  A de regras de produção
<var>  B
<var>  C
• derivação canônica
<expression>  <var> + <var>
<expression>  <var> - <var>
<expression>  <var>
Gramáticas e Árvores
<assign>  <id> = <expr> Ex.: A = B * ( A + C )
<id>  A
<id>  B
<id>  C
<expr>  <id> + <expr> • Árvore de derivação
<expr>  <id> * <expr>
<expr>  <id>
<expr>  ( <expr> )
Árvore de Derivação
Uma árvore de derivação para a sentença A = B * (A + C)
Ambiguidade
Duas árvores distintas para a mesma senteça, A = B + C * A
Gramáticas não-ambíguas
Árvore de derivação única para A = B + C *
Associatividade da adição
Ambiguidade do if-then-else
Duas árvores de derivação distintas
Outras notações
Grafos sintáticos e EBNF para o comando if da linguagem ADA
Descrição da Semântica de LPs
• Semântica Operacional
– define o significado de cada comando da linguagem em
termos de seu efeito sobre o estado de uma máquina
(abstrata ou real)
• Semântica Denotacional
– define o significado de cada elemento de uma linguagem
através de um objeto matemático e de funções que os
relacionam
• Semântica Axiomática
– define o significado de cada comando através de assertivas
lógicas.
Linguagens de Programação
• Evolução das LPs
– Primeira Geração: Linguagem de máquina
• Código de Máquina (0s e 1s).
– Segunda Geração:
• Linguagem de Montagem - Assembler
– Terceira Geração
• Imperativas: FORTRAN, Cobol, Basic, Algol, ADA, Pascal, C
• Lógicas e Funcionais: LISP, ML, Prolog
– Quarta Geração
• Geradores de Relatórios, Linguagens de Consultas: SQL, CSP
– Quinta Geração
• LOO : Smalltalk, Java, Eiffel, Simula 67
– Sexta Geração ?
• Web e Linguagens Dinâmicas : Python, JavaScript, Ruby
Ranking de Popularidade 2006
1 Java Static
2 C Static
3 C++ Static
4 Visual Basic Static
5 PHP Dynamic
6 Perl Dynamic
7 C# Static
8 Python Dynamic
9 JavaScript Dynamic
10 Ruby Dynamic
11 SAS Dynamic
12 Delphi Static
13 PL/SQL Dynamic
14 D Static
15 ABAP Dynamic
16 Lisp/Scheme Dynamic
17 Ada Static
18 Cobol Dynamic
19 Pascal Static
20 Transact/SQL Static
Linguagens Imperativas
Linguagens Imperativas (i)

Linguagens imperativas ou procedurais são linguagens


orientadas à comandos ou declarações. Elas baseiam-se na idéia de
que a memória mantém uma máquina de estados que pode ser
modificada a cada execução das declarações da linguagem.

A Figura a seguir ilustra este processo.


Linguagens Imperativas (ii)
Geralmente tem uma sintaxe do tipo:
+
declaração 1;
declaração 2;
declaração 3;
.....

A memória é vista como


um conjunto de caixas
modificadas a cada
declaração do programa.
Linguagens Imperativas (iii)
Desenvolvimento de programas consiste na modificação
consecutiva dos estado da memória até se chegue a uma
solução desejada.

Este paradigma representa geralmente a primeira abordagem


que alguém aprende em programação (no MIT usava-se
programação funcional como primeiro curso). Algumas das
mais usadas linguagens de programação usam este modelo de
programação:

C, FORTRAN, Algol, Pascal, COBOL, “C++”, “Java”, etc.


Linguagens Orientadas a Objetos
Linguagens OO (i)
Linguagens orientadas à objeto são linguagens que estendem a
linguagens imperativas com a introdução do conceitos de objetos.
Objetos são conjuntos de dados geralmente complexos com
funções bem definidas que podem ser aplicadas eles. Funções e
dados são encapsulados pelo objeto de forma a expor somente o
que se quer a outros objetos. Objetos se comunicam por
mensagens, que chamam as funções expostas. Para facilitar esta
prática, funções similares podem ter o mesmo nome deste que
tenham estruturas diversas (polimorfismo em tempo de
compilação), ou a associação entre uma mensagem e um objeto (e
a função chamada) pode ser feita dinamicamente em tempo de
execução (polimorfismo real).
Linguagens OO (ii)
Objeto 1 Objeto 2

mensagem

Objeto 4
Objeto 3
Linguagens OO (iii)
Objetos são definidos a partir de outros objetos mais genéricos
através de mecanismos de herança.

Superclasse

Subclasse
Linguagens OO (iv)

Ao construir objetos concretos na memória, OO usa a eficiência da


programação imperativa. Ao construir classes de funções que
aplicam-se a um conjunto restrito de objetos, OO ganha através de
encapsulamento e polimorfismo a flexibilidade e confiabilidade da
programação funcional (nossa próxima transparência).

São exemplos de linguagens OO as linguagens Smalltalk, Ada


(não tem polimorfismo real), C++, e Java.
Linguagens Funcionais
Linguagens Funcionais (i)

Linguagens funcionais ou aplicativas são linguagens orientadas à


função que um programa representa. Isto é conseguido pensando-
se na função que deve ser aplicada num estado de máquina inicial
para transformá-lo em um estado de máquina final desejado como
resposta.

Pode-se ver este processo como a construção de uma lente que


pega o estado inicial da memória e o “transforma” em um estado
final desejado. A Figura a seguir ilustra este processo.
Linguagens Funcionais (ii)
lente ou
lente ou função 2 Resultado
função 1

Geralmente tem uma


sintaxe do tipo:

funçãoN(
funçãoN-1 (...
função2(
função1(dados)) ...
))
Linguagens Funcionais (iii)

Desenvolvimento de programas consiste em sucessivamente


desenvolver funções a partir de funções previamente
existentes (bottom-up), até chegar uma função final
(geralmente complexa) que consegue computar a resposta
desejada a partir do conjunto inicial de dados.

Em vez de olhar para sucessivas máquinas de estados de uma


computação, a programação aplicativa considera sucessivas
transformações funcionais. LISP e ML são duas da mais
conhecidas linguagens funcionais.
Linguagens Funcionais (iv)

Exemplo Livro
Linguagens Lógicas
Linguagens Lógicas (i)

Linguagens lógicas ou baseadas em regras são linguagens


baseada na lógica de predicados, onde uma série de regras são
definidas para que o programa tome ações apropriadas para cada
estado habilitador na memória do computador.

Pode-se ver este processo como a construção de uma série de


filtros (as regras) que sucessivamente habilitam mudança de
estados. A figura a seguir ilustra este processo.
Linguagens Lógicas (2)
condição habilitadora
ação habilitada Geralmente tem uma sintaxe do tipo:

condição1 -> ação1


+
condição2 -> ação2
....
condiçãon -> açãon
Linguagens Lógicas (3)
Desenvolvimento de programas consiste em construir-se um
conjunto de regras que trate (tenha condições habilitadoras e
tome ações adequadas) todos os possíveis estados de iniciais
do programa.

Prolog (linguagem de programação lógica) é o exemplo mais


conhecido desta família de linguagens.
Linguagens Lógicas (4)
Exemplo Livro

Vous aimerez peut-être aussi