1 / 33

Sintaxe e Semântica

Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática. Sintaxe e Semântica. Prof.: Gláucya Carreiro Boechat glaucyacboechat@gmail.com. Sintaxe e Semântica. Provêm a definição da linguagem Sintaxe

cherie
Download Presentation

Sintaxe e Semântica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 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 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; 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 • 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) • 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) 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> 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 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) 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 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 deatribuiçã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 parainstruçõ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 amesma 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. 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. 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. 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 BNF e EBNF 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 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. 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’ Paradigmas de Programação - prof Gláucya Carreiro Boechat

More Related