Escolar Documentos
Profissional Documentos
Cultura Documentos
Sintaxe e Semântica
Semântica
O significado das expressões, das instruções e das unidades
de programas
Identificação das seqüências de símbolos validos que constituem
estruturas sintáticas
Paradigmas de Programação - 2
prof Gláucya Carreiro Boechat
Sintaxe e Semântica
Semântica
Se o valor da expressão for verdadeiro, a instrução será
executada
Paradigmas de Programação - 3
prof Gláucya Carreiro Boechat
Descrevendo a sintaxe: terminologia
Uma linguagem é uma conjunto de sentenças
Uma sentença é uma cadeia de tokens
Um lexema é a unidade sintática de mais baixo nível
de uma linguagem
Exemplos:
*, sum, begin, if
Paradigmas de Programação - 4
prof Gláucya Carreiro Boechat
Descrevendo a sintaxe: terminologia
Exemplo (C)
Resultado = 45 + Cont * 5;
Lexema Token
resultado identificador
= sinal_igual
45 int_literal
+ op_soma
Cont Identificador
* op_mult
5 int_literal
; ponto_e_virgula
Paradigmas de Programação - 5
prof Gláucya Carreiro Boechat
Definição formal de linguagens
Reconhecedores de linguagens
Dispositivo que recebe um token como entrada e verifica se
o mesmo pertence a linguagem
Exemplo:
Análise Sintática (parte de um compilador)
Geradores de linguagens
Dispositivo que gera sentenças da linguagem
Determinando se a sintaxe de uma sentença em particular
está correta
Através de comparações com a estrutura da linguagem gerada
If <condição = true> then <instrução>
Paradigmas de Programação - 6
prof Gláucya Carreiro Boechat
Métodos formais para descrever a sintaxe
Paradigmas de Programação - 7
prof Gláucya Carreiro Boechat
Gramáticas Livres de Contexto
Paradigmas de Programação - 8
prof Gláucya Carreiro Boechat
Backus-Naur Form (BNF)
Paradigmas de Programação - 9
prof Gláucya Carreiro Boechat
BNF - Fundamentos
Terminais: lexemas e tokens
Não-terminais: BNF abstrações
Atual como variáveis
Gramática: uma coleção de regras
Exemplos de regras BNF:
Atribuição em C(Representada pela abstração)
<Atribuição> --> <var> = <expressão>
Paradigmas de Programação - 10
prof Gláucya Carreiro Boechat
Regras BNF
Uma regra possui
um lado esquerdo (LHS - Left Hand Side)
consiste de símbolos não-terminais
um lado direito (RHS - Right Hand Side),
consiste de símbolos terminais e não-terminais
Paradigmas de Programação - 11
prof Gláucya Carreiro Boechat
Listas Sintáticas
Derivação
Aplicação de regras repetidas vezes,
começando com um símbolo inicial
finalizando com uma sentença (símbolos terminais)
Paradigmas de Programação - 12
prof Gláucya Carreiro Boechat
Uma gramática para uma pequena
linguagem
<program> -> begin <stmts> end
<var> -> a | b | c | d
Paradigmas de Programação - 13
prof Gláucya Carreiro Boechat
Exemplo gramática para uma pequena linguagem
<program>
<program> => <stmts>
=> <stmt> <stmts>
Paradigmas de Programação - 14
prof Gláucya Carreiro Boechat
Uma gramática para instruções de
atribuição simples
<assign> -> <id> = <expr>
<id> -> A | B | C
<expr> -> <id> + <expr>
| <id> * <expr>
| ( <expr> )
| <id>
Paradigmas de Programação - 15
prof Gláucya Carreiro Boechat
Árvore de Análise (Parse Tree)
Paradigmas de Programação - 16
prof Gláucya Carreiro Boechat
Ambigüidade em gramáticas
Paradigmas de Programação - 17
prof Gláucya Carreiro Boechat
Uma gramática ambígua para
instruções de atribuição simples
<assign> -> <id> = <expr>
<expr> -> <expr> + <expr>
| <expr> * <expr>
| ( <expr> )
| <id>
<id> -> A | B | C
Paradigmas de Programação - 18
prof Gláucya Carreiro Boechat
Duas árvores de análise para a
mesma sentença
A=B+C*A
Paradigmas de Programação - 19
prof Gláucya Carreiro Boechat
Uma gramática não-ambígua para expressões
Paradigmas de Programação - 20
prof Gláucya Carreiro Boechat
A árvore de análise única para a expressão
A =B+C*A
Paradigmas de Programação - 21
prof Gláucya Carreiro Boechat
Exemplo – Sintaxe para expressões
Calculadora simples
Com -> Expr
Expr -> Num
| Expr + Num
| Expr - Num
| Expr * Num
| Expr / Num
Num -> Dig
|Num Dig
Dig -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Paradigmas de Programação - 22
prof Gláucya Carreiro Boechat
Exemplo2 – Priorização em linguagens de
Programação
1ª Prioridade : *, /, and, ...
2ª Prioridade : +, -, or, ...
3ª Prioridade : =, >, <, ...
Paradigmas de Programação - 23
prof Gláucya Carreiro Boechat
Exemplo2 – Priorização em linguagens de
Programação
tExpr -> sExpr
| tExpr + sExpr
| tExpr - sExpr
| tExpr or sExpr
Paradigmas de Programação - 24
prof Gláucya Carreiro Boechat
Associatividade de Operadores
Associatividade de operadores podem ser
indicados pela gramática
Exemplo
A = B + C + A (adição é associativa)
A = B / C / A (divisão não é associativa)
Paradigmas de Programação - 25
prof Gláucya Carreiro Boechat
Associatividade de Operadores
Exemplo
<expr> -> <expr> + <expr> | const (ambígua)
<expr> -> <expr> + const | const (não-ambígua)
Paradigmas de Programação - 26
prof Gláucya Carreiro Boechat
Árvore de análise associatividade da adição
A=B+C+A
Paradigmas de Programação - 27
prof Gláucya Carreiro Boechat
BNF estendida
Adição de novas extensões
Paradigmas de Programação - 28
prof Gláucya Carreiro Boechat
BNF estendida
Uso de parenteses ( ) no RHS
Opções de múltipla escolha, são colocadas dentro de
parênteses e separadas por barras verticais
<term> -> <term> ( + | - ) const
<for_stmt> -> for <var> = <expr> ( to | downto ) <expr> do <stmt>
Paradigmas de Programação - 29
prof Gláucya Carreiro Boechat
BNF e EBNF
BNF EBNF
<expr> -> <expr> + <term> <expr> -> <term> { (+ | -) <term> }
| <expr> - <term>
| <term> <term> -> <factor> { (* | / ) <factor> }
<term> -> <term> * <factor>
| <term> / <factor> <factor> -> <exp> { ** <exp> }
| <factor>
<factor> -> <exp> ** <factor> <exp> -> ( <expr> )
| <exp> | id
<exp> -> ( <expr> )
| id
Paradigmas de Programação - 30
prof Gláucya Carreiro Boechat
Exercícios
Traduzir as seguintes seqüências
5–6–7
5*6*7
5*6–7
5–3*2–7
A and B = C
A or B = C
Paradigmas de Programação - 31
prof Gláucya Carreiro Boechat
Exercícios
Modificar a sintaxe previamente
estabelecida para as expressões sejam
avaliadas tendo as comparações com
maior precedência (Ex.: A and (B=C)).
Refaça a tradução das expressões
considerando a nova sintaxe estabelecida.
Paradigmas de Programação - 32
prof Gláucya Carreiro Boechat
Exercícios
Adicionar os operadores unários ‘++’, ‘--’ e
‘not’. Os operadores ‘++’ e ‘--’ devem ter a
mesma prioridade dos seus correspondentes
binários, e devem ser permitidos como ‘pré’
ou ‘pós’. O operador ‘not’ deve possuir uma
prioridade mais alta do que todos os
operadores já definidos.
Represente as expressões ‘--a+b’, ‘a+b--’, ‘++a*b’
e ‘not A and B’
Paradigmas de Programação - 33
prof Gláucya Carreiro Boechat