Sie sind auf Seite 1von 34

Sintaxe e Semntica

George Darmiton da Cunha Cavalcanti


(gdcc@cin.ufpe.br)

Tpicos Introduo O problema de descrever a sintaxe Mtodos formais para descrever a sintaxe Gramticas de atributos Descrevendo o significado dos programas: semntica dinmica

Introduo
Sintaxe
A forma ou estrutura das expresses, das instrues e das unidades de programas

Semntica
O significa das expresses, das instrues e das unidades de programas

Exemplo: comando if na linguagem C


Sintaxe
if (<expr>) <instruo>

Semntica
Se o valor da expresso for verdadeiro, a instruo ser executada

Introduo A sintaxe e a semntica provm a definio da linguagem


Usurios da definio da linguagem
Projetistas de linguagens Programadores

Descrever a sintaxe mais fcil do que a semntica


Uma notao concisa e universal para a sintaxe existe

Descrevendo a sintaxe: terminologia Uma sentena uma cadeia de caracteres sobre um alfabeto Uma linguagem uma conjunto de sentenas Um lexema a unidade sinttica de mais baixo nvel de uma linguagem
Exemplos: *, sum, begin

Um token uma categoria dos lexemas


Exemplo: identificador, op_mult

Descrevendo a sintaxe: terminologia


Em alguns casos, um token tem apenas um nico lexema possvel. Exemplo de instruo em C
index = 2 * cont + 17;
Lexema index = 2 * Cont + 17 ; Token Identificador sinal_igual int_literal op_mult identificador op_soma int_literal ponto_e_vrgula

Definio formal de linguagens Reconhecedores de linguagens


Um dispositivo que recebe uma string como entrada e verifica se a mesma pertence a linguagem Exemplo: anlise sinttica (parte de um compilador)

Geradores de linguagens
Um dispositivo que gera sentenas de uma linguagem possvel determinar se a sintaxe de uma sentena em particular est correta atravs da comparao dela com a estrutura do gerador

Mtodos formais para descrever a sintaxe

Forma de Backus-Naur e Gramtica Livre de Contexto


Mtodo mais usado para descrever a sintaxe das linguagens de programao

Extended BNF (Backus-Naur Form)


Aumenta readability e writability da BNF

BNF e Gramticas Livres de Contexto Gramticas Livres de Contexto


Desenvolvida por Noam Chomsky nos meados da dcada de 1950 Objetivando descrever a sintaxe das linguagens naturais Define uma classe de linguagens chamadas de linguagens livres de contexto

Backus-Naur Form (BNF)


Backus-Naur Form (1959)
Inventada por John Backus para descrever o Algol 58 BNF equivalente a gramticas livre de contexto BNF uma metalinguagem usada para descrever outras linguagens Em BNF, abstraes so usadas para representar classes de estruturas sintticas
Agem como variveis sintticas (tambm chamadas de smbolos no-terminais)

BNF Fundamentos
No-terminais: BNF abstraes Terminais: lexemas e tokens Gramtica: uma coleo de regras
Exemplos de regras BNF:
<ident_list> identifier | identifier, <ident_list>

<if_stmt> if <logic_expr> then <stmt>


Abstraes

Regras BNF Uma regra possui um lado esquerdo (LHS) e um lado direito (RHS), e consiste de smbolos terminais e no-terminais Uma gramtica um conjunto no vazio de regras Uma abstrao (ou smbolo no-terminal) pode ter mais de um RHS
<stmt> <single_stmt> | begin <stmt_list> end

Descrevendo Listas
Listas sintticas so descritas usando recurso
<ident_list> ident | ident, <ident_list>

Uma derivao a aplicao de regras repetidas vezes, comeando com um smbolo inicial e finalizando com uma sentena formada de smbolos terminais

Uma gramtica para uma pequena linguagem

Uma gramtica para instrues de atribuio simples

rvore de Anlise (Parse Tree)

Ambigidade em gramticas

Uma gramtica ambgua se e somente se ela gera uma sentena para a qual h duas ou mais rvores de anlise distintas

Uma gramtica ambgua para instrues de atribuio simples

Duas rvores de anlise para a mesma sentena

Uma gramtica no-ambgua para expresses

A rvore de anlise nica para a expresso

Associatividade de operadores
Associatividade de operadores podem ser indicados pela gramtica
<expr> -> <expr> + <expr> | <expr> -> <expr> + const | const const (ambgua) (no-ambgua)

<expr> <expr> <expr> <expr> const + + const const

Uma rvore de anlise ilustrando a associatividade da adio

BNF estendida
Partes opcionais so colocadas entre colchetes [ ]
<proc_call> -> ident [(<expr_list>)]

Opes de mltipla escolha, partes alternativas da RHS so colocadas dentro de parnteses e separadas por barras verticais
<term> <term> (+|-) const

Repeties (0 ou mais) so colocadas dentro de chaves { }


<ident> letter {letter|digit}

BNF e EBNF

Gramticas de Atributos
Gramticas livres de contexto (GLC) no podem descrever toda a sintaxe de linguagens de programao
Compatibilidade de tipos

Pois a gramtica iria se tornar grande demais


Exigindo smbolos no-terminais e regras adicionais

Gramticas de atributos incorporam informaes semnticas nas parse trees

Gramticas de Atributos
Exemplos de regras que no podem ser especificadas na BNF
Determina que todas as variveis devem ser declaradas antes de serem referenciadas O end do subprograma Ada seguido de um nome deve coincidir com o nome do subprograma

Esses dois problemas exemplificam a categoria das regras de linguagem chamada de semntica esttica
Leva esse nome pois a anlise necessria para verificar essas especificaes pode ser feita na compilao

Gramticas de Atributos: Exemplo Em um procedimento em Ada, o nome no end deve ser igual ao nome do procedimento Regra de sintaxe
<def_proc> procedure <nome_do_proc>[1] <corpo_do_proc> end <nome_do_proc>[2]

Regra semntica
<nome_do_proc>[1].string = <nome_do_proc>[2].string

Gramticas de Atributos: Exemplo


Verificao das regras de tipos de uma instruo de atribuio simples Parte sinttica da gramtica <assign> <var> = <expr> <expr> <var> + <var> | <var> <var> A | B | C Observaes:
As variveis podem ser de dois tipos: int ou real O tipo do lado esquerda expresso deve ser o mesmo do lado direito O tipo da expresso quando os tipos dos operandos so diferentes real

Gramticas de Atributos do exemplo anterior

Gramticas de Atributos: uma rvore de anlise

Gramticas de Atributos: computando os valores de atributo

1. <var>.tipo_efetivo look-up(A)
Regra 4

2. <expr>.tipo_esperado var.tipo_efetivo
Regra 1

3. <var>[2].tipo_efetivo look-up (A)


Regra 4

<var>[3].tipo_efetivo look-up (B)


Regra 4

4. <expr>.tipo_efetivo int ou real


Regra 2

5. <expr>.tipo_esperado = <expr>.tipo_efetivo TRUE ou FALSE


Regra 2

Gramticas de Atributos: computando os valores de atributo

Valores finais nos vrtices, adotando A como real e B como int

Gramticas de Atributos: avaliao

Tm sido utilizadas em diversas aplicaes


Descries completas da sintaxe e da semntica de linguagens de programao Como a definio formal de uma linguagem (gerao de compiladores) Sistemas de processamento de linguagens naturais

Dificuldades
Complexo e grande Dificuldade de leitura e escritas das gramticas

Das könnte Ihnen auch gefallen