A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat

Apresentações semelhantes


Apresentação em tema: "Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat"— Transcrição da apresentação:

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

2 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Paradigmas de Programação prof Gláucya Carreiro Boechat

3 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 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 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 ; ponto_e_virgula 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> 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 Paradigmas de Programação prof Gláucya Carreiro Boechat

8 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 Paradigmas de Programação prof Gláucya Carreiro Boechat

9 Backus-Naur Form (BNF)
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) Paradigmas de Programação prof Gláucya Carreiro Boechat

10 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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> Paradigmas de Programação prof Gláucya Carreiro Boechat

11 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Paradigmas de Programação prof Gláucya Carreiro Boechat

12 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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) Paradigmas de Programação prof Gláucya Carreiro Boechat

13 Uma gramática 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 Programação prof Gláucya Carreiro Boechat

14 Exemplo gramática para uma pequena linguagem
<program> <stmts> <stmt> <var> = <expr> a <term> + <term> <var> const b <program> => <stmts> => <stmt> => <var> = <expr> => a = <expr> => a = <term> + <term> => a = <var> + <term> => a = b + <term> => a = b + const 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> Paradigmas de Programação prof Gláucya Carreiro Boechat

16 Árvore de Análise (Parse Tree)
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 Paradigmas de Programação prof Gláucya Carreiro Boechat

18 Uma gramática ambígua para instruções de atribuição simples
<assign> -> <id> = <expr> <expr> -> <expr> + <expr> | <expr> * <expr> | ( <expr> ) | <id> <id> -> A | B | C Paradigmas de Programação prof Gláucya Carreiro Boechat

19 Duas árvores de análise para a mesma sentença
A = B + C * A 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 Paradigmas de Programação prof Gláucya Carreiro Boechat

21 A árvore de análise única para a expressão
A = B + C * A 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 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 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) 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) 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) Paradigmas de Programação prof Gláucya Carreiro Boechat

27 Árvore de análise associatividade da adição
A = B + C + A Paradigmas de Programação prof Gláucya Carreiro Boechat

28 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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>];  Paradigmas de Programação prof Gláucya Carreiro Boechat

29 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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> }  Paradigmas de Programação prof Gláucya Carreiro Boechat

30 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Programação prof Gláucya Carreiro Boechat

31 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Paradigmas de Programação prof Gláucya Carreiro Boechat

32 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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. Paradigmas de Programação prof Gláucya Carreiro Boechat

33 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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’ Paradigmas de Programação prof Gláucya Carreiro Boechat


Carregar ppt "Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat"

Apresentações semelhantes


Anúncios Google