Post on 06-Jul-2015
Sintaxe e SemânticaSintaxe e SemânticaProf. Iális Cavalcante
Engenharia da Computação – UFC/Sobral
1 Introdução1 Introdução1. Introdução1. IntroduçãoDescrição concisa e inteligível de uma Descrição concisa e inteligível de uma linguagem;P bl d d fi i ã d li fProblema da definição de uma linguagem: fazer-se entender sua descrição;Manual de referência da linguagem;Estudo das linguagens de programação:◦ Sintaxe: regras de definição das expressões, instruções
e unidades de programa;◦ Semântica: verificação do significado do que foi
estruturado na sintaxe.
1 Introdução1 Introdução1. Introdução1. Introdução
if (<expr>) <instrução>if (<expr>) <instrução>Sintaxe de if em C;Semântica: se o valor total da expressão for verdadeiro a instrução incorporada for verdadeiro, a instrução incorporada será selecionada para execução (ufa!!!);if 0 1/if x > 0 y = 1/x;if (x == 0) y = 1/x;
Erro de sintaxe!
Erro de semântica!( ) y / ;
Correto: if (x > 0) y = 1/x;
1 Introdução1 Introdução1. Introdução1. IntroduçãoLinguagens são conjuntos de seqüências de Linguagens são conjuntos de seqüências de caracteres de algum alfabeto;
S üê i i õ◦ Seqüências: sentenças ou instruções.
Regras de sintaxe especificam quais seqüências g p q qfazem parte da linguagem.Uma análise léxica descreve que lexema fazem Uma análise léxica descreve que lexema fazem parte da descrição da linguagem;Lexemas: identificadores, literais, operadores e palavras especiais.p p
1 Introdução1 Introdução1. Introdução1. Introdução
Símbolo (token): categoria de lexemasSímbolo (token): categoria de lexemasInstrução em C: index = 2 * cont + 17;
Lexemas Símbolos
index identificador
= sinal_igual
2 int_literal
* op_mult
cont identificador
+ op soma+ op_soma
17 int_literal
; ponto_e_virgulap g
1 Introdução1 Introdução1. Introdução1. IntroduçãoDescrição da sintaxe da linguagemDescrição da sintaxe da linguagem◦ Reconhecedor
linguagem L alfabeto Σ reconhecedor Rlinguagem L, alfabeto Σ, reconhecedor R.R identifica se seqüência criada a partir de Σ pertence a LL.
◦ GeradorE t t d f ã ã d Estrutura com regras de formação para geração de novas seqüências.
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe
Tais mecanismos são chamados de Tais mecanismos são chamados de gramáticas.N Ch k d dé d d Noam Chomsky descreveu, na década de 50, quatro gramáticas para definir novas l d liclasses de linguagens.◦ Dentre elas: gramática livre de contexto.
B d ó d l Busca da natureza teórica das linguagens naturais.Li i i d ã d ◦ Linguagens inteiras de programação podem ser descritas por ela.
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe
John Backus, 1959◦ Descrição do ALGOL 58, notação formal para
especificar a sintaxe de uma LP;Peter Naur, 1960◦ Modificou a notação de Backus para o
ALGOL 60◦ O método revisado tornou-se conhecido
como forma de Backus-Naur ou BNF.◦ BNF é quase idêntica à idéia de gramática
livre de contexto.
2. Métodos formais para descrição da sintaxe2. Métodos formais para descrição da sintaxe
BNF é a metalinguagem das linguagens de programação;Usa abstrações para estruturas sintáticas (regra ou Usa abstrações para estruturas sintáticas (regra ou produção):◦ <atribuição> -> <var> = <expressão>ç p
l b1 b2
símbolosnão-terminais
símbolosterminais
◦ total = sub1 + sub2
Gramática: conjunto de regras;if em C:if em C:◦ <inst_if> -> if <expr_lógica> <inst>
<inst_if> -> if <expr_lógica> <inst> else <inst>_ p _ g
Ou◦ <inst_if> -> if <expr_lógica> <inst>
| if <expr_lógica> <inst> else <inst>
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe
Gramática para uma pequena linguagem:Gramática para uma pequena linguagem:
<programa> -> begin <lista_inst> end<lista_inst> -> <inst>
| <inst>; <lista_inst><inst> -> <var> = <expressão><var> -> A | B | C<expressão> -> <var> + <var>
| <var> - <var>| <var>
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe
U d i ã d liUma derivação de um programa nessa linguagem:<programa> => begin <lista_inst> end
=> begin <inst>; <lista inst> end> begin <inst>; <lista_inst> end=> begin <var> = <expressão>; <lista_inst> end=> begin A = <expressão>; <lista_inst> end=> begin A = <var> + <var>; <lista_inst> end=> begin A = B + <var>; <lista_inst> end=> begin A = B + C; <lista inst> end=> begin A = B + C; <lista_inst> end=> begin A = B + C; <inst> end=> begin A = B + C; <var> = <expressão> end=> begin A = B + C; B = <expressão> end=> begin A = B + C; B = <var> end=> b i A = B + C B = C d=> begin A = B + C; B = C end
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe
<atribuição> -> <id> = <expr><id> -> A | B | C| |<expr> -> <id> + <expr>
| <id> * <expr>| ( <expr> )| ( <expr> )| <id>
Com a gramática acima, como alcançar a instrução a seguir?instrução a seguir?
A = B * ( A + C )
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe<atribuição> => <id> = <expr><atribuição> => <id> = <expr>
=> A = <expr>=> A = <id> * <expr>=> A = <id> * <expr>=> A = B * <expr>=> A = B * ( <expr> )=> A = B * ( <expr> )=> A = B * ( <id> + <expr> )=> A = B * ( A + < > )=> A = B * ( A + <expr> )=> A = B * ( A + <id> )
> A B * ( A + C )=> A = B * ( A + C )
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe
Árvore de análise (parse tree)Árvore de análise (parse tree)
<atribuição><atribuição>
<id> <expr>=
A *<id> <expr>
P dê iB
+
( )<expr>
<id> <expr>
Procedênciade operadores
p
A <id>
C
2. Métodos formais para descrição da 2. Métodos formais para descrição da sintaxesintaxe
BNF Estendida (Extended BNF EBNF)BNF Estendida (Extended BNF – EBNF)◦ Não aumenta o poder descritivo das expressões, mas
sua legibilidade e capacidade de escrita;sua legibilidade e capacidade de escrita;1ª extensão: parte opcional com uso de colchetes
<seleção> > if ( <expressão> ) <instrução> [ else<seleção> -> if ( <expressão> ) <instrução> [ else<instrução> ];
2ª extensão: uso de chaves indicando repetição p çindefinida ou omissão
<lista_ident> -> <identificador> { , <identificador> };
3ª extensão: múltipla escolha entre parênteses. Uso do operador | , OU
<inst_for> -> for <var> := <expr> (to | downto) <expr> do <inst>
2. Métodos formais para descrição 2. Métodos formais para descrição da sintaxeda sintaxe
BNF: <expr> -> <expr> + <termo>
| <expr> - <termo>| p| <termo>
<termo> -> <termo> * <fator>| <termo> / <fator>| <fator>| fator
EBNF: <expr> -> <termo> { (+ | -) <termo> }
<t > > <f t > { (* | /) <f t > }<termo> -> <fator> { (* | /) <fator> }
2. Métodos formais para descrição da sintaxe2. Métodos formais para descrição da sintaxepp
Grafo de sintaxe: BNF e EBNF representados por grafos dirigidos (de arestas direcionais)dirigidos (de arestas direcionais)
if theninst_if condição inst
end if ;
else
end_if
else_if
;
inst
else_if thenelse_if condição inst
<inst_if > -> if <condição> then <inst> { <else_if> }[ else <inst> ] end if
<else_if> -> elseif <condição> then <inst>Grafo de sintaxe e descrição EBNF da instrução Ada if.
_ ç
3 Gramática de atributos3 Gramática de atributos3. Gramática de atributos3. Gramática de atributosExtensão de uma gramática livre de contexto.Extensão de uma gramática livre de contexto.Uma das soluções para descrição da
â ti táti BNFsemântica estática com a BNF...Semântica estática◦ Se relaciona indiretamente com o significado
do programa em execução...p g ç◦ Verificação com as formas legais do programa
Restrição e compatibilidade de tipos;Restrição e compatibilidade de tipos;Tempo de compilação (estática!).Exemplo em Java: double x = 4; int y = 4 5;Exemplo em Java: double x = 4; int y = 4.5;
3 Gramática de atributos3 Gramática de atributos3. Gramática de atributos3. Gramática de atributos
São gramáticas com a adição de:São gramáticas com a adição de:◦ Atributos: símbolos gramaticais;◦ Funções de computação de atributos:
(ou funções semânticas) especificam a computação dos valores dos atributos;◦ Funções predicadas: declaram a sintaxe ç p
relacionadas às regras gramaticais.
3 Gramática de atributos3 Gramática de atributos3. Gramática de atributos3. Gramática de atributos
Procedimento em Ada (aplicação da Procedimento em Ada (aplicação da semântica estática):◦ Regra de sintaxe: <def_proc> ‐> procedure <nome_proc>[1] <corpo_do_proc> end <nome_proc>[2]
◦ Regra de semântica:<nome_proc>[1] = <nome_proc>[2]
3. Gramática de atributos3. Gramática de atributos1. Regra de sintaxe: <atribuição> -> <var> = <expr>
Regra semântica: <expr>.tipo_esperado <- <var>.tipo_efetivo2 2 32. Regra de sintaxe: <expr> -> <var>[2] + <var>[3]
Regra semântica: <expr>.tipo_efetivo <-if ( <var>[2].tipo efetivo = int ) eif ( var [2].tipo_efetivo int ) e( <var>[3].tipo_efetivo = int )then int Pesquisa nome de
iá l b l d else realend if
Predicado: <expr> tipo efetivo = <expr> tipo esperado
variável na tabela de símbolos e retorna o
tipo da mesma
Predicado: <expr>.tipo_efetivo = <expr>.tipo_esperado3. Regra de sintaxe: <expr> -> <var>
Regra semântica: <expr>.tipo_efetivo <- <var>.tipo_efetivoPredicado: <expr>.tipo_efetivo <- <var>.tipo_esperado
4. Regra de sintaxe: <var> -> A | B | CRegra semântica: <var> tipo efetivo < look up ( <var> string )Regra semântica: <var>.tipo_efetivo <- look-up ( <var>.string )
3 Gramática de atributos3 Gramática de atributos3. Gramática de atributos3. Gramática de atributosUm conjunto de atributos A(X) está associado a cada símbolo gramatical X
<atribuição>
Um conjunto de atributos A(X) está associado a cada símbolo gramatical X.
<expr>S(X) – atributo
sintetizado
<var> <var>[2] <var>[3]
I(X) – atributo
A A B= +
( )herdado
3 Gramática de atributos3 Gramática de atributos3. Gramática de atributos3. Gramática de atributos
<atribuição>
tipo_esperado
<expr>
tipo_efetivo
tipo_efetivo
<var> <var>[2] <var>[3]tipo_efetivo tipo_efetivo
A A B= +
Fluxo dos atributos na árvoreFluxo dos atributos na árvore.
3 Gramática de atributos3 Gramática de atributos3. Gramática de atributos3. Gramática de atributos
<atribuição>
<expr>tipo_esperado = tipo_realtipo_efetivo = tipo_real
tipo efetivo = <var> <var>[2] tipo efetivo = <var>[3] tipo efetivo =tipo_efetivo = <var>tipo_real
<var>[2] tipo_efetivo =tipo_real
<var>[3] tipo_efetivo =tipo_int
A A B= +
Árvore de análise completamente atribuída.
4 Semântica dinâmica4 Semântica dinâmica4. Semântica dinâmica4. Semântica dinâmicaNenhuma notação universalmente aceita;Nenhuma notação universalmente aceita;4.1. Semântica operacionalD i ifi d d Descrever o significado de um programa ao executar suas instruções em uma máquina, real ou simulada;simulada;Isso exige a construção de uma máquina para execução do interpretador do código de máquina;execução do interpretador do código de máquina;Essa máquina pode ser virtual◦ para simular os efeitos de uma máquina real;◦ para simular os efeitos de uma máquina real;◦ Evita conflito com configurações do sistema operacional
e/ou hardware.
4 Semântica dinâmica4 Semântica dinâmica4. Semântica dinâmica4. Semântica dinâmicaDescrição da semântica de uma linguagem Descrição da semântica de uma linguagem L por um método operacional:
T d t d i t õ L ◦ Tradutor das instruções em L para uma linguagem de baixo nível;C nstr çã da má ina irt al ara a ◦ Construção da máquina virtual para a simulação do software: registradores, memória informações de status e processo de memória, informações de status e processo de execução.
Depende de algoritmos não da Depende de algoritmos, não da matemática.
4 Semântica dinâmica4 Semântica dinâmica4. Semântica dinâmica4. Semântica dinâmica
4 2 Semântica axiomática4.2. Semântica axiomáticaBaseada na lógica formal, foi idealizada como ferramenta para provar a exatidão dos programas;p g ;soma = 2 * x + 1 { soma > 1 }
predicadoou asserção
pré- epós-condição
4 Semântica dinâmica4 Semântica dinâmica4. Semântica dinâmica4. Semântica dinâmica
4 3 Semântica denotacional4.3. Semântica denotacionalObjetos matemáticos são usados para representar os significados das construções de linguagens;g g ;Exemplo: sintaxe dos números binários
<n m bin> > 0<num_bin> ‐> 0
| 1
| bi 0| <num_bin> 0
| <num_bin> 1
4 Semântica dinâmica4 Semântica dinâmica4. Semântica dinâmica4. Semântica dinâmica
Mbin(‘0’) = 0Mbin(‘1’) = 1Mbin(<num bin> ‘0’) = 2*Mbin(<num bin>)Mbin(<num_bin> 0 ) = 2 Mbin(<num_bin>)Mbin(<num_bin> ‘1’) = 2*Mbin(<num_bin>) + 1
<num_bin>
<num bin> 0
<num_bin>
<num bin> 0
6
3<num_bin> 0
<num_bin> 1
<num_bin> 0
<num_bin> 11
1Árvore de análise para Árvore de análise com objetos
1p
o número binário 110.j
denotados para 110.
5 Revisão5 Revisão5. Revisão5. Revisão
Sintaxe e semântica;Sintaxe e semântica;Lexema, token e gramática;Gramática livre de contexto e BNF;Gramática de atributos;Gramática de atributos;Semântica dinâmica.