Você está na página 1de 33

Universidade Federal Rural de Pernambuco Departamento de Estatstica e Informtica

Sintaxe e Semntica

Prof.: Glucya Carreiro Boechat


glaucyacboechat@gmail.com

Sintaxe e Semntica

Provm a definio da linguagem Sintaxe

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

Estrutura formada de acordo com Regras Gramaticais da Linguagem. (Estruturas Sintticas) Exemplo (condio diferente)

Pascal ( <> ) ; C = ( != ) ; Ada ( /= )

Semntica

O significado das expresses, das instrues e das unidades de programas

Identificao das seqncias de smbolos validos que constituem estruturas sintticas


Paradigmas de Programao prof Glucya Carreiro Boechat 2

Sintaxe e Semntica

Exemplo: comando if na linguagem C

Sintaxe

if (<expr>) <instruo>

Semntica

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

Paradigmas de Programao prof Glucya Carreiro Boechat

Descrevendo a sintaxe: terminologia

Uma linguagem uma conjunto de sentenas Uma sentena uma cadeia de tokens
Um lexema a unidade sinttica de mais baixo nvel de uma linguagem

Exemplos:

*, sum, begin, if

Um token uma categoria dos lexemas


Seqncia de caracteres sobre um alfabeto Exemplo:

identificador, op_mult
Paradigmas de Programao prof Glucya Carreiro Boechat

Descrevendo a sintaxe: terminologia

Exemplo (C)

Resultado = 45 + Cont * 5;

Lexema
resultado = 45 + Cont *

Token
identificador sinal_igual int_literal op_soma Identificador op_mult

5
;

int_literal
ponto_e_virgula
Paradigmas de Programao prof Glucya Carreiro Boechat 5

Definio formal de linguagens

Reconhecedores de linguagens

Dispositivo que recebe um token como entrada e verifica se o mesmo pertence a linguagem Exemplo:

Anlise Sinttica (parte de um compilador)

Geradores de linguagens

Dispositivo que gera sentenas da linguagem Determinando se a sintaxe de uma sentena em particular est correta

Atravs de comparaes com a estrutura da linguagem gerada If <condio = true> then <instruo>
Paradigmas de Programao prof Glucya Carreiro Boechat 6

Mtodos formais para descrever a sintaxe

Forma de Backus-Naur (BNF)

Mtodo mais usado para descrever a sintaxe das linguagens de programao Uma metalinguagem usada para descrever outras linguagens

Extended Backus Naur Form (EBNF)

Por apresentar algumas inconvenincias a BNF foi estendida Aumenta Legibilidade e Capacidade escrita da BNF
Paradigmas de Programao prof Glucya Carreiro Boechat 7

Gramticas Livres de Contexto

Gramticas Livres de Contexto

Desenvolvida por Noam Chomsky nos meados da dcada de 1950 Define uma classe de linguagens chamadas de linguagens livres de contexto Objetivo

Descrever a sintaxe das linguagens naturais So gramticas onde as regras de produo so definidas de forma mais livre

Paradigmas de Programao prof Glucya Carreiro Boechat

Backus-Naur Form (BNF)

Backus-Naur Form (1959)

Inventada por John Backus para descrever o Algol 58 (International Algorithmic Language) 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)


Paradigmas de Programao prof Glucya Carreiro Boechat 9

BNF - Fundamentos

Terminais: lexemas e tokens

No-terminais: BNF abstraes

Atual como variveis

Gramtica: uma coleo de regras

Exemplos de regras BNF:


Atribuio em C(Representada pela abstrao) <Atribuio> --> <var> = <expresso>

<ident_list> -> identifier | identifier , <ident_list> <if_stmt> -> if <expr_logica> then <stmt> <if_stmt> -> if <expr_logica> then <stmt> else <stmt>
Paradigmas de Programao prof Glucya Carreiro Boechat 10

Regras BNF

Uma regra possui

um lado esquerdo (LHS - Left Hand Side)

consiste de smbolos no-terminais consiste de smbolos terminais e no-terminais

um lado direito (RHS - Right Hand Side),

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
Paradigmas de Programao prof Glucya Carreiro Boechat 11

Listas Sintticas

Listas sintticas so descritas usando recurso


<ident_list> -> ident
| ident , <ident_list>

Derivao

Aplicao de regras repetidas vezes,


comeando com um smbolo inicial finalizando com uma sentena (smbolos terminais)

Paradigmas de Programao prof Glucya Carreiro Boechat

12

Uma gramtica para uma pequena linguagem


<program> -> begin <stmts> end <stmts> -> <stmt> | <stmt> ; <stmts> <stmt> -> <var> = <expr> <var> -> a | b | c | d <expr> -> <term> + <term> | <term> - <term> <term> -> <var> | const
Paradigmas de Programao prof Glucya Carreiro Boechat 13

Exemplo gramtica para uma pequena linguagem


<program>

<program> => <stmts> => <stmt> => <var> = <expr> => a = <expr> => a = <term> + <term> => a = <var> + <term> => a = b + <term> => a = b + const

<stmts>

<stmt>

<var>

<expr>

<term>

<term>

<var>

const

b
Paradigmas de Programao prof Glucya Carreiro Boechat 14

Uma gramtica para instrues de atribuio simples


<assign> -> <id> = <expr> <id> -> A | B | C <expr> -> <id> + <expr> | <id> * <expr> | ( <expr> ) | <id>

Paradigmas de Programao prof Glucya Carreiro Boechat

15

rvore de Anlise (Parse Tree)

Paradigmas de Programao prof Glucya Carreiro Boechat

16

Ambigidade em gramticas

Uma gramtica ambgua se e somente se ela gera uma sentena que possui duas ou mais rvores de anlise distintas

Paradigmas de Programao prof Glucya Carreiro Boechat

17

Uma gramtica ambgua para instrues de atribuio simples


<assign> -> <id> = <expr> <expr> -> <expr> + <expr> | <expr> * <expr> | ( <expr> ) | <id> <id> -> A | B | C

Paradigmas de Programao prof Glucya Carreiro Boechat

18

Duas rvores de anlise para a mesma sentena

A=B+C*A

Paradigmas de Programao prof Glucya Carreiro Boechat

19

Uma gramtica no-ambgua para expresses

indicar os nveis de precedncia de operadores, no teremos ambigidade


<assign> -> <id> = <expr> <expr> -> <expr> + <term> | <term> <term> -> < term > * <factor> | <factor> <factor> -> ( <expr> ) | <id> <id> -> A | B | C

Paradigmas de Programao prof Glucya Carreiro Boechat

20

A rvore de anlise nica para a expresso


A

=B+C*A

Paradigmas de Programao prof Glucya Carreiro Boechat

21

Exemplo Sintaxe para expresses

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 Programao prof Glucya Carreiro Boechat 22

Exemplo2 Priorizao em linguagens de Programao


1 Prioridade : *, /, and, ... 2 Prioridade : +, -, or, ... 3 Prioridade : =, >, <, ...
Expr -> tExpr | tExpr = tExpr | tExpr < tExpr | tExpr > tExpr

Paradigmas de Programao prof Glucya Carreiro Boechat

23

Exemplo2 Priorizao em linguagens de Programao


tExpr -> sExpr | tExpr + sExpr | tExpr - sExpr | tExpr or sExpr sExpr -> pExpr | sExpr * pExpr | sExpr / pExpr | sExpr and pExpr pExpr -> Lit | Var | (Exp)
Paradigmas de Programao prof Glucya Carreiro Boechat 24

Associatividade de Operadores

Associatividade de operadores podem ser indicados pela gramtica

Exemplo

A = B + C + A (adio associativa) A = B / C / A (diviso no associativa)

Paradigmas de Programao prof Glucya Carreiro Boechat

25

Associatividade de Operadores

Exemplo

<expr> -> <expr> + <expr> | const (ambgua) <expr> -> <expr> + const | const (no-ambgua)

Paradigmas de Programao prof Glucya Carreiro Boechat

26

rvore de anlise associatividade da adio

A=B+C+A

Paradigmas de Programao prof Glucya Carreiro Boechat

27

BNF estendida

Adio de novas extenses Uso de Colchetes [ ] no RHS

Partes opcionais

<proc_call> -> ident [ ( <expr_list> ) ] <seleo> -> if ( <expresso> ) <instruo> [else <instruo>];

Paradigmas de Programao prof Glucya Carreiro Boechat

28

BNF estendida

Uso de parenteses ( ) no RHS

Opes de mltipla escolha, so colocadas dentro de parnteses e separadas por barras verticais

<term> -> <term> ( + | - ) const <for_stmt> -> for <var> = <expr> ( to | downto ) <expr> do <stmt>

Uso de chaves { } no RHS

Indica zero ou repetio indefinida <ident> -> letter { letter | digit } <lista_ident> -> <identificador> { , <identificador> }
Paradigmas de Programao prof Glucya Carreiro Boechat 29

BNF e EBNF

BNF

<expr> -> <expr> + <term> | <expr> - <term> | <term>


<term> -> <term> * <factor> | <term> / <factor> | <factor> <factor> -> <exp> ** <factor> | <exp> <exp> -> ( <expr> ) | id

EBNF <expr> -> <term> { (+ | -) <term> }

<term> -> <factor> { (* | / ) <factor> }

<factor> -> <exp> { ** <exp> }


<exp> -> ( <expr> ) | id

Paradigmas de Programao prof Glucya Carreiro Boechat

30

Exerccios

Traduzir as seguintes seqncias


567 5*6*7 5*67 53*27 A and B = C A or B = C

Paradigmas de Programao prof Glucya Carreiro Boechat

31

Exerccios

Modificar a sintaxe previamente estabelecida para as expresses sejam avaliadas tendo as comparaes com maior precedncia (Ex.: A and (B=C)). Refaa a traduo das expresses considerando a nova sintaxe estabelecida.

Paradigmas de Programao prof Glucya Carreiro Boechat

32

Exerccios

Adicionar os operadores unrios ++, -- e not. Os operadores ++ e -- devem ter a mesma prioridade dos seus correspondentes binrios, e devem ser permitidos como pr ou ps. O operador not deve possuir uma prioridade mais alta do que todos os operadores j definidos.

Represente as expresses --a+b, a+b--, ++a*b e not A and B

Paradigmas de Programao prof Glucya Carreiro Boechat

33