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

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

Tópicos em Compiladores
Compiladores Claudio Benossi
Compiladores I Cristiano Damiani Vasconcellos
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTRODUÇÃO AOS APLICATIVOS JAVA Prof. Thiago Pereira Rique
INTRODUÇÃO AOS APLICATIVOS JAVA
Linguagens Formais e Autômatos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Vetores Representação e características Operações I Decomposição
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Árvores.
EXPRESSÕES ARITMÉTICAS
EXPRESSÕES ARITMÉTICAS
Linguagens Livres de Contexto
BCC101 – Matemática Discreta
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Construção de Compiladores
Construção de Compiladores
André Luis Meneses Silva
Aula 3 Evolução da Principais Linguagens
Aula 4 Nomes, Vinculações, Tipos e Escopos
Programação Baseada em Objectos Desenho de TAD
Estrutura de decisão e repetição em JAVA
Prof. Bruno Moreno Aula 4 – 11/03/2011
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
Análise léxica e sintática
Compiladores, Aula Nº 9 João M. P. Cardoso
SISTEMAS DIGITAIS ALGEBRA DE BOOLE E SIMPLIFICAÇÃO DE CIRC. LÓGICOS
Gramáticas Livres de Contexto
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
Compiladores, Aula Nº 10 João M. P. Cardoso
EXERCÍCIOS PARA GUARDA-REDES
Estruturas de Controle entre Instruções
Teoria e Implementação de Linguagens Computacionais – IF688
Tipos Abstratos de Dados
Expressões e Instrução de Atribuição
Semântica de Linguagens de Programação
Análises léxica e sintática
Modelos de Paradigmas de programação
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Paradigmas de Programação - prof Gláucya Carreiro Boechat1 Elaborando um Programa Prof.: Gláucya Carreiro Boechat Universidade.
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Análises léxica e sintática
BCC101 Matemática Discreta I
Planilha Eletrônica - Excel
INTRODUÇÃO À PROGRAMAÇÃO EM LÓGICA Profa. Joseluce de Farias Cunha
Análise Sintática Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
Revisão Compiladores – AP2
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Um Tradutor Dirigido por Sintaxe Simples
Linguagem C.
Semântica de Linguagens de Programação
Sintaxe de uma Linguagem
PLP – JavaCC Java Compiler Compiler
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
COMPILADORES 03 Prof. Marcos.
Transcrição da apresentação:

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 glaucyacboechat@gmail.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Árvore de Análise (Parse Tree) Paradigmas de Programação - prof Gláucya Carreiro Boechat

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

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

Duas árvores de análise para a mesma sentença A = B + C * A Paradigmas de Programação - prof Gláucya Carreiro Boechat

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

A árvore de análise única para a expressão A = B + C * A Paradigmas de Programação - prof Gláucya Carreiro Boechat

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

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

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

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

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

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

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

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

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

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

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

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