Paradigmas de
Programação
Prof.: Edilberto M. Silva
http://www.edilms.eti.br http://www.edilms.eti.br
Aula 4
Aula 4
Sintaxe e semântica Sintaxe e semânticaPP - Prof. Edilberto Silva - http://edilms.eti,br
Sintaxe
A sintaxe de uma linguagem de programação é a
forma de suas expressões, declarações e unidades de programa.
Também pode ser definida como o conjunto de
regras que determinam que construções estão corretas e quais não estão.
Algumas aplicações são melhor acomodadas pela
sintaxe de uma linguagem do que outras.
Por exemplo, a sintaxe de FORTRAN foi projetada para
expressar programas matemáticos, enquanto que a de BASIC é uma boa opção para tornar o programa
compreensível para não-programadores.
As linguagens mais modernas como C, C++ e Java
possuem uma sintaxe que permite mais facilmente a expressão de estruturas de controle.
Duas Abordagens para Descrição de
Linguagens de Programação
Descrições Informais
Utiliza linguagem natural
É imprecisa: permite a ocorrência de erros de interpretação
Descrições Formais
Utiliza uma linguagem matemática
Possui significado bem definido: Evita erros de interpretação
Possibilita a utilização de metodologias de apoio a projetos
PP - Prof. Edilberto Silva - http://edilms.eti,br
Vantagens da Utilização de
Métodos Formais
Interface entre projetistas, implementadores e usuários
Projetista:
Define precisamente a linguagem desejada
Permite a identificação precoce de erros
Implementador:
Possibilita a utilização de geradores (semi-)automáticos
Dificulta o aparecimento de erros
Sintaxe
Define a forma e estrutura de uma linguagem
Símbolos, palavras, frases e sentenças (estruturas)
Principal formalismo:
Gramáticas Livres de Contexto e Expressões Regulares Notação mais utilizada: BNF (Backus-Naur Form)
PP - Prof. Edilberto Silva - http://edilms.eti,br
Gramáticas Livres de Contexto
Estrutura principal:
Comando <--
[[ “if” Expressão “then” Comando “else” Comando ]]
Significado:
Um Comando da linguagem definida pode ser formado pela palavra chave “if” seguida de uma Expressão da linguagem, da palavra chave “then”, de um Comando da linguagem, da palavra chave “else”, e de um outro
Sintaxe Concreta x Sintaxe
Abstrata
Sintaxe concreta: Descreve a estrutura da
linguagem com todos os detalhes.
Considera elementos “estéticos” como comentários, palavras reservadas, precedência de operadores, e outros “açucares sintáticos”.
Utilizado para construir reconhecedores para programas.
Sintaxe abstrata: Descreve apenas os elementos
relevantes da linguagem de programação.
• Ignora comentários e outros elementos que não contribuem para a semântica do programa
• Utilizada para representar programas internamente no compilador
PP - Prof. Edilberto Silva - http://edilms.eti,br
Mais Detalhes ...
Esse formalismo será estudado mais detalhadamente
na disciplina de “Teoria e Implementação de Linguagens de Computacionais”
Semântica
Objetivo:
Descrever o significados das estruturas do programa expressos na sua sintaxe
Tipos de semântica
Semântica estática: Descreve as características de uma programa válido
Semântica dinâmica: Descreve os resultados da execução
PP - Prof. Edilberto Silva - http://edilms.eti,br
Formalismos Utilizados
Ao contrário da sintaxe, não existe ainda um
formalismo aceito globalmente para descrever a semântica da linguagem
Exemplos de formalismos:
Semântica Operacional Estrutural, Máquinas de Estado
Abstratas, Semântica Denotacional, Semântica de Ações, Montages, etc.
Semântica De Ações
Formalismo para definição de linguagens de
programação.
Define um mapeamento da sintaxe do programa
para o seu significado.
Significado de programa é dado através da notação
PP - Prof. Edilberto Silva - http://edilms.eti,br
Notação de Ações
Biblioteca que descreve os principais conceitos
encontrados em linguagens de programação que serão estudados nesse curso (valores, bindings, memória, etc.)
Durante esse curso veremos para cada conceito
estudado os operadores que descrevem as propriedades fundamentais de cada conceito
Definição de Ações
Uma ação é uma entidade que pode ser executada.
Quando uma ação é executada ela pode:
Terminar com sucesso
Terminar com um erro
Gerar uma exceção (escape)
Não-terminar (executar para sempre)
Durante a execução de uma ação ela produz e
consome vários tipos de informação: (transientes, bindings, memória, etc.)
PP - Prof. Edilberto Silva - http://edilms.eti,br
A faceta básica define operadores que não
manipulam nenhum tipo de informação apenas controlam o fluxo do programa
Semântica de Ações
Faceta Básica
Principais Operadores
complete -- Executa com sucesso sem produzir
nenhuma informação.
fail -- Produz uma falha na execução da ação
a and then b -- Executa as ações a e b
sequêncialmente
a or b -- Executa uma das ações e se esta falhar a
Exemplos de Ações:
| complete and then | complete | complete and then | failPP - Prof. Edilberto Silva - http://edilms.eti,br
Exemplo de Descrições
Comandos vazio Sintaxe: Comando --> [[ “;” ]] Semântica:execute _ :: Comando --> action.
Exemplo de Descrições
Sequência de Comandos:
Sintaxe:
Comando --> [[ Comando Comando ]]
Semântica:
execute _ :: Comando --> action.
execute [[ c1 c2 ]] = | execute c1
and then | execute c2.
PP - Prof. Edilberto Silva - http://edilms.eti,br
A faceta funcional define ações que manipulam valores
temporários (transitórios) produzidos pela execução de um programa.
Utilização principal: Descrição da manipulação de
valores e como expressões são avaliadas em um programa.
Semântica de Ações -Faceta Funcional
Principais Operadores
give e -- produz o valor resultante da avaliação da
expressão e.
x then y -- Executa as ações x e y seqüencialmente, os valores transitórios produzidos por x serão repassados para a ação y.
the given t # n -- Expressão (produtor) que recupera o
n-ésimo valor passado para essa ação e verifica se este é do tipo t.
Exemplos de Ações
give 10| give 20 then
| give sum(2,the given
integer#1)
| | give 1 | and then | | give 2 then
| give product(the given
integer#1,
PP - Prof. Edilberto Silva - http://edilms.eti,br
EXP1
Linguagens de Expressões Aritméticas
Demostra a utilização de valores em LP
Estrutuas:
Constantes numéricas: 1,2,3, etc.
Operações fundamentais: • 1 + 2
• 4 - 3
• 5 * 2
Descrição de EXP1
Constantes Numéricas.
Sintaxe:
Expressão <-- [[ Integer ]].
Semântica:
avalie _ :: Expressão --> action. avalie [[ x : Integer ]] = give x.
PP - Prof. Edilberto Silva - http://edilms.eti,br
Descrição de EXP1
Soma de Expressões.
Sintaxe:
Expressão <-- [[ Expressão “+” Expressão ]].
Semântica:
avalie _ :: Expressão --> action. avalie [[ x “+” y ]] =
|avalie x and then avalie y then