Unidade03

Post on 06-Jul-2015

786 views 0 download

Transcript of Unidade03

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.