Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouRenato Sardinha Alterado mais de 9 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.