33
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat [email protected] Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat [email protected] Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Embed Size (px)

Citation preview

Page 1: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Sintaxe e Semântica

Prof.: Gláucya Carreiro Boechat [email protected]

Universidade Federal Rural de PernambucoDepartamento de Estatística e Informática

Page 2: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

2

Sintaxe e Semântica Provêm a definição da linguagem Sintaxe

A forma ou estrutura das expressões, das instruções e das unidades de programas Estrutura formada de acordo com Regras Gramaticais da

Linguagem. (Estruturas Sintáticas) Exemplo (condição diferente)

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

Semântica O significado das expressões, das instruções e das unidades

de programas Identificação das seqüências de símbolos validos que constituem

estruturas sintáticas

Page 3: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

3

Sintaxe e Semântica

Exemplo: comando if na linguagem C Sintaxe

if (<expr>) <instrução>

Semântica Se o valor da expressão for verdadeiro, a instrução será

executada

Page 4: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

4

Descrevendo a sintaxe: terminologia Uma linguagem é uma conjunto de sentenças Uma sentença é uma cadeia de tokens

Um lexema é a unidade sintática de mais baixo nível de uma linguagem Exemplos:

*, sum, begin, if

Um token é uma categoria dos lexemas Seqüência de caracteres sobre um alfabeto Exemplo:

identificador, op_mult

Page 5: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

5

Descrevendo a sintaxe: terminologia Exemplo (C) Resultado = 45 + Cont * 5;

Lexema Token

resultado identificador

= sinal_igual

45 int_literal

+ op_soma

Cont Identificador

* op_mult

5 int_literal

; ponto_e_virgula

Page 6: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

6

Definição formal de linguagens Reconhecedores de linguagens

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

Exemplo: Análise Sintática (parte de um compilador)

Geradores de linguagens Dispositivo que gera sentenças da linguagem Determinando se a sintaxe de uma sentença em particular

está correta Através de comparações com a estrutura da linguagem gerada If <condição = true> then <instrução>

Page 7: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

7

Métodos formais para descrever a sintaxe Forma de Backus-Naur (BNF)

Método mais usado para descrever a sintaxe das linguagens de programação

Uma metalinguagem é usada para descrever outras linguagens

Extended Backus Naur Form (EBNF) Por apresentar algumas inconveniências a BNF foi

estendida Aumenta Legibilidade e Capacidade escrita da BNF

Page 8: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

8

Gramáticas Livres de Contexto Gramáticas Livres de Contexto

Desenvolvida por Noam Chomsky nos meados da década de 1950

Define uma classe de linguagens chamadas de linguagens livres de contexto

Objetivo Descrever a sintaxe das linguagens naturais São gramáticas onde as regras de produção são

definidas de forma mais livre

Page 9: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

9

Backus-Naur Form (BNF)

Backus-Naur Form (1959) Inventada por John Backus para descrever o

Algol 58 (International Algorithmic Language) BNF é equivalente a gramáticas livre de contexto BNF é uma metalinguagem usada para descrever

outras linguagens Em BNF, abstrações são usadas para

representar classes de estruturas sintáticas Agem como variáveis sintáticas (também chamadas de

símbolos não-terminais)

Page 10: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

10

BNF - Fundamentos Terminais: lexemas e tokens

Não-terminais: BNF abstrações Atual como variáveis

Gramática: uma coleção de regras Exemplos de regras BNF:

Atribuição em C(Representada pela abstração) <Atribuição>  -->  <var> = <expressão> 

<ident_list> -> identifier | identifier , <ident_list> <if_stmt> -> if <expr_logica> then <stmt> <if_stmt> -> if <expr_logica> then <stmt> else <stmt>

Page 11: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

11

Regras BNF

Uma regra possui um lado esquerdo (LHS - Left Hand Side)

consiste de símbolos não-terminais um lado direito (RHS - Right Hand Side),

consiste de símbolos terminais e não-terminais

Uma gramática é um conjunto não vazio de regras

Uma abstração (ou símbolo não-terminal) pode ter mais de um RHS <stmt> -> <single_stmt> | begin <stmt_list> end

Page 12: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

12

Listas Sintáticas

Listas sintáticas são descritas usando recursão <ident_list> -> ident

| ident , <ident_list>

Derivação Aplicação de regras repetidas vezes,

começando com um símbolo inicial finalizando com uma sentença (símbolos terminais)

Page 13: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

13

Uma gramática para uma pequenalinguagem<program> -> begin <stmts> end

<stmts> -> <stmt> | <stmt> ; <stmts>

<stmt> -> <var> = <expr>

<var> -> a | b | c | d

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

<term> -> <var> | const

Page 14: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

14

Exemplo gramática para uma pequena linguagem

<program> => <stmts>

=> <stmt>

=> <var> = <expr>

=> a = <expr>

=> a = <term> + <term>

=> a = <var> + <term>

=> a = b + <term>

=> a = b + const

<program>

<stmts>

<stmt>

<var> = <expr>

a <term> + <term>

<var> const

b

Page 15: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

15

Uma gramática para instruções de

atribuição simples<assign> -> <id> = <expr>

<id> -> A | B | C

<expr> -> <id> + <expr>

| <id> * <expr>

| ( <expr> )

| <id>

Page 16: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

16

Árvore de Análise (Parse Tree)

Page 17: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

17

Ambigüidade em gramáticas

Uma gramática é ambígua se e somente se ela gera uma sentença que possui duas ou mais árvores de análise distintas

Page 18: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

18

Uma gramática ambígua parainstruções de atribuição simples

<assign> -> <id> = <expr>

<expr> -> <expr> + <expr>

| <expr> * <expr>

| ( <expr> )

| <id>

<id> -> A | B | C

Page 19: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

19

Duas árvores de análise para amesma sentença A = B + C * A

Page 20: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

20

Uma gramática não-ambígua para expressões

indicar os níveis de precedência de operadores, não teremos ambigüidade

<assign> -> <id> = <expr><expr> -> <expr> + <term>

| <term><term> -> < term > * <factor>

| <factor><factor> -> ( <expr> )

| <id><id> -> A | B | C

Page 21: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

21

A árvore de análise única para a expressão

A = B + C * A

Page 22: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

22

Exemplo – Sintaxe para expressões

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

Page 23: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

23

Exemplo2 – Priorização em linguagens de Programação

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

Expr -> tExpr

| tExpr = tExpr

| tExpr < tExpr

| tExpr > tExpr

Page 24: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

24

Exemplo2 – Priorização em linguagens de Programação

tExpr -> sExpr | tExpr + sExpr | tExpr - sExpr | tExpr or sExpr

sExpr -> pExpr | sExpr * pExpr | sExpr / pExpr | sExpr and pExpr

pExpr -> Lit | Var | (Exp)

Page 25: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

25

Associatividade de Operadores

Associatividade de operadores podem ser indicados pela gramática

Exemplo A = B + C + A (adição é associativa) A = B / C / A   (divisão não é associativa)

Page 26: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

26

Associatividade de Operadores Exemplo

<expr> -> <expr> + <expr> | const (ambígua) <expr> -> <expr> + const | const (não-ambígua)

Page 27: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

27

Árvore de análise associatividade da adição

A = B + C + A

Page 28: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

28

BNF estendida

Adição de novas extensões

Uso de Colchetes [ ] no RHS Partes opcionais

<proc_call> -> ident [ ( <expr_list> ) ] <seleção> -> if ( <expressão> ) <instrução> [else <instrução>]; 

Page 29: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

29

BNF estendida

Uso de parenteses ( ) no RHS Opções de múltipla escolha, são colocadas dentro de

parênteses 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 repetição indefinida

<ident> -> letter { letter | digit } <lista_ident> -> <identificador> { , <identificador> } 

Page 30: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

30

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

Page 31: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

31

Exercícios

Traduzir as seguintes seqüências 5 – 6 – 7 5 * 6 * 7 5 * 6 – 7 5 – 3 * 2 – 7 A and B = C A or B = C

Page 32: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

32

Exercícios

Modificar a sintaxe previamente estabelecida para as expressões sejam avaliadas tendo as comparações com maior precedência (Ex.: A and (B=C)). Refaça a tradução das expressões considerando a nova sintaxe estabelecida.

Page 33: Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

Paradigmas de Programação - prof Gláucya Carreiro Boechat

33

Exercícios Adicionar os operadores unários ‘++’, ‘--’ e

‘not’. Os operadores ‘++’ e ‘--’ devem ter a mesma prioridade dos seus correspondentes binários, e devem ser permitidos como ‘pré’ ou ‘pós’. O operador ‘not’ deve possuir uma prioridade mais alta do que todos os operadores já definidos. Represente as expressões ‘--a+b’, ‘a+b--’, ‘++a*b’

e ‘not A and B’