Unidade03

30
Sintaxe e Semântica Sintaxe e Semântica Prof. Iális Cavalcante Engenharia da Computação – UFC/Sobral

Transcript of Unidade03

Page 1: Unidade03

Sintaxe e SemânticaSintaxe e SemânticaProf. Iális Cavalcante

Engenharia da Computação – UFC/Sobral

Page 2: Unidade03

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.

Page 3: Unidade03

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;

Page 4: Unidade03

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

Page 5: Unidade03

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

Page 6: Unidade03

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.

Page 7: Unidade03

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.

Page 8: Unidade03

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.

Page 9: Unidade03

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>

Page 10: Unidade03

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>

Page 11: Unidade03

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

Page 12: Unidade03

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 )

Page 13: Unidade03

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 )

Page 14: Unidade03

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

Page 15: Unidade03

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>

Page 16: Unidade03

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> }

Page 17: Unidade03

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.

_ ç

Page 18: Unidade03

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;

Page 19: Unidade03

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.

Page 20: Unidade03

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]

Page 21: Unidade03

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 )

Page 22: Unidade03

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

Page 23: Unidade03

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.

Page 24: Unidade03

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.

Page 25: Unidade03

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.

Page 26: Unidade03

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.

Page 27: Unidade03

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

Page 28: Unidade03

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

Page 29: Unidade03

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.

Page 30: Unidade03

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.