03. [Sebesta, 2000] Descreva a operação de um gerador de linguagem geral.



Documentos relacionados
Um Tradutor Dirigido por Sintaxe

Análise Léxica. Sumário

Ciclo com Contador : instrução for. for de variável := expressão to. expressão do instrução

Árvores de Derivação para GLC Ambigüidade nas GLC Precedência, Prioridade e Associatividade de operadores

Compiladores. Transformações de GLCs. Plano da aula. Análise Top-Down. Análise Top-Down Exemplo. Gramáticas Livres de Contexto.

Gramáticas Livres de Contexto

Introdução à Programação

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Comandos de Desvio 1

Bases de Dados BDDAD. Álgebra Relacional. Nelson Freire (ISEP LEI-BDDAD 2015/16) 1/33

Sumários de REDES de COMUNICAÇÃO

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores 12/03/2011 VARIÁVEIS E TIPOS DE DADOS

Compiladores II. Fabio Mascarenhas

Programação para Computação

Algoritmos e Programação : Conceitos e estruturas básicas. Hudson Victoria Diniz

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

Avaliação e Desempenho Aula 1 - Simulação

Linguagem de programação: Pascal

Estruturas de Repetição

4. Álgebra Booleana e Simplificação Lógica. 4. Álgebra Booleana e Simplificação Lógica 1. Operações e Expressões Booleanas. Objetivos.

Análise Sintática. Análise Sintática. Tipos de Analisadores Gramáticais: PARSERS

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Java possui 4 tipos de dados. Estes tipos de dados são divididos em: boolean, character, integer e float.

INF1005: Programação I. Algoritmos e Pseudocódigo

CURSO DE MATEMÁTICA BÁSICA PROGRAMA DE EDUCAÇÃO TUTORIAL CENTRO DE ENGENHARIA DA MOBILIDADE

2. Tipos Abstratos de Dados

Compiladores. Prof. Bruno Moreno Aula 11 20/05/2011

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

LINGUAGEM JAVA - RESUMO

Módulo IV Programação Visual Basic. Programação

Folha 4.2 Análise sintática ascendente

Conceitos de Linguagem de Programação - 2

Projetando um Computador

Exercícios de Teoria da Computação Autómatos, gramáticas e expressões regulares

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Geração e Otimização de Código (continuação)

Capítulo II : A Linguagem Pascal Conceitos Fundamentais

3. COMPILAÇÃO E ESTRUTURA BÁSICA DE UM PROGRAMA EM C

Introdução O problema geral de descrever sintaxe Métodos formas de descrever sintaxe Gramática de atributos Semântica dinâmica

Montadores e Compiladores

Nº horas ESTRATÉGIAS RECURSOS AVALIAÇÃO

Projetando um Computador Parte II Arquitetura do Processador BIP

Lógica para computação Professor Marlon Marcon

6) ESTRUTURA DE UM PROGRAMA

Compiladores Análise Semântica

FESP FACULDADE DE ENGENHARIA SÃO PAULO DISCIPLINA BP1: PROCESSAMENTO DE DADOS

INE5318 Construção de Compiladores. Ricardo Azambuja Silveira INE-CTC-UFSC URL:

Banco de dados. Aula 22 O Comando SELECT. 1 Wedson Quintanilha da Silva -

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Engenharia Econômica

Aprendendo SQL. Alan Beaulieu. Novatec

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Variáveis Compostas Heterogêneas. Variável Composta Heterogênea. Variável Composta Heterogênea

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de

Lista de Exercícios 5: Soluções Teoria dos Conjuntos

CAPÍTULO II. Variáveis e Expressões CAPÍTULO II COMENTÁRIOS SINTAXE / SEMÂNTICA ESTRUTURA DE UM ALGORITMO EM PSEUDOCÓDIGO

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Algoritmos e Estruturas de Dados I. Variáveis Indexadas. Pedro O.S. Vaz de Melo

Conceitos de Linguagens de Programação

Compiladores 02 Analise léxica

Compiladores - Análise Recursiva

02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas?

Python e sua sintaxe LNCC UFRJ

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

Compiladores Análise Semântica

Algoritmos APRENDENDO A PROGRAMAR COM C#

Aula 11: Desvios e Laços


15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Primeira Prova de Análise e otimização de Código - DCC888 -

Roteiro da aula. MA091 Matemática básica. Quadrados perfeitos. Raiz quadrada. Aula 8 Raízes. Francisco A. M. Gomes. Março de 2016

Introdução a Programação Aula 01

Linguagens de Programação

Compiladores Análise Semântica

Linguagens de Programação Aula 14

5. ESTRUTURA DE CONTROLE TOMADA DE DECISÕES

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Programação em FORTRAN V. João Manuel R. S. Tavares

Até o momento, vimos que a estrutura de um computador segue uma seqüência: ENTRADA => PROCESSAMENTO => SAÍDA

Paradigmas de Linguagem de Programação. Paradigma Imperativo

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Gramática. Gramática

Tipos de problemas de programação inteira (PI) Programação Inteira. Abordagem para solução de problemas de PI. Programação inteira

Simulado de Linguagem de Programação Java

Capítulo 5: Repetições

Variáveis Frequências Gráficos Medidas de Posição Medidas de Dispersão Medidas Complementares Inferência

Linguagens e Programação Gramáticas. Paulo Proença

Linguagem de Programação I

Introdução a JAVA. Variáveis, tipos, expressões, comandos e blocos

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

MC Teste de Mesa e Comandos Repetitivos

GRANDEZAS PROPORCIONAIS Matemática Financeira. HERCULES SARTI Mestre

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

Compiladores - Análise Recursiva

Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C. Exercícios: Structs

Sintaxe e Semântica. Fases da Compilação. programa fonte

Métodos Formais. Agenda. Relações Binárias Relações e Banco de Dados Operações nas Relações Resumo Relações Funções. Relações e Funções

Compilação da linguagem Panda

Introdução à Programação com Python

Transcrição:

01. [Sebesta, 2000] Defina sintaxe e semântica. 02. [Sebesta, 2000] A quem se destinam as descrições de linguagem? 03. [Sebesta, 2000] Descreva a operação de um gerador de linguagem geral. 04. [Sebesta, 2000] Descreva a operação de um reconhecedor de linguagem geral. 05. [Sebesta, 2000] Qual é a diferença entre uma sentença e uma forma semântica? 06. [Sebesta, 2000] Defina uma regra de gramática recursiva à esquerda. 07. [Sebesta, 2000] Quais três extensões são comuns à maioria das EBNFs? 08. [Sebesta, 2000] Descreva semântica estática e dinâmica. 09. [Sebesta, 2000] A qual propósito servem os predicados em uma gramática de atributos? 10. [Sebesta, 2000] Qual é a diferença entre um atributo sintetizado e um herdado? 11. [Sebesta, 2000] Qual é a ordem de avaliação de atributos determinada para as árvores de determinada gramática de atributos? 12. [Sebesta, 2000] Qual é o principal uso das gramáticas de atributos? 13. [Sebesta, 2000] Qual é o problema quando se usa um interpretador puro de software para a semântica operacional? 14. [Sebesta, 2000] Explique o que as pré-condições e as pós-condições de determinada instrução significam na semântica axiomática. 15. [Sebesta, 2000] Descreva a abordagem de usar a semântica axiomática para provar a exatidão de determinado programa. 16. [Sebesta, 2000] Descreva o conceito básico da semântica denotacional. 17. [Sebesta, 2000] De que maneira a semântica operacional e a semântica denotacional diferem? 18. [Sebesta, 2000] Os dois modelos matemáticos de descrição de linguagens são geração e reconhecimento. Descreva como cada um pode definir a sintaxe de um linguagem de programação. 19. [Sebesta, 2000] Escreva descrições BNF e de grafo de sintaxe para cada item: a) Uma instrução de cabeçalho (header) procedure Pascal. b) Uma instrução de chamada procedure Pascal. c) Uma instrução switch C. d) Uma definição union C. e) Literais float C. 24. [Sebesta, 2000] Usando a gramática a seguir, mostre uma árvore de análise e uma derivação à extrema esquerda das seguintes instruções: a) A := A * (B + (C * A)) b) B := C * (A * C + B) c) A := A * (B + (C)) 1 de 6

G = ({atribuição, id, expr}, {:=, +, *, (, ), A, B, C}, P, atribuição) < expr > < id > + < expr > < id > * < expr > ( < expr > ) < id > } 25. [Sebesta, 2000] Usando a gramática a seguir, mostre uma derivação à extrema esquerda das seguintes instruções: a) A := (A + B) * C b) A := B + C + A c) A := A * (B + C) d) A := B * (C * (A + B)) G = ({atribuição, id, expr, termo, fator}, {:=, +, *, (, ), A, B, C}, P, atribuição) < expr > < expr > + < expr > < termo > < termo > < termo > * < fator > < fator > < fator > ( < expr > ) < id > } 26. [Sebesta, 2000] Prove que a seguinte gramática é ambígua: G = ({S, A, id}, {+, a, b, c}, P, S) P = { < S > < A > < A > < A > + < A > < id > < id > a b c } 27. [Sebesta, 2000] Modifique a gramática a seguir para adicionar um operador unitário que tenha uma precedência mais alta do que + ou *. G = ({atribuição, id, expr, termo, fator}, {:=, +, *, (, ), A, B, C}, P, atribuição) < expr > < expr > + < expr > < termo > < termo > < termo > * < fator > < fator > < fator > ( < expr > ) < id > } 28. [Sebesta, 2000] Descreva, em português, a linguagem definida pela seguinte gramática: G = ({S, A, B, C}, {a, b, c}, P, S) P = { < S > < A > < B > < C > < A > a < A > a < B > b < B > b < C > c < C > c } 2 de 6

29. [Sebesta, 2000] Considerando a gramática a seguir, quais das seguintes sentenças estão na linguagem gerada por essa gramática? G = ({S, A, B}, {a, b}, P, S) P = { < S > < A > a < B > b < A > < A > b b < B > a < B > a } a) baab b) bbbab c) bbaaaaa d) bbaab 30. [Sebesta, 2000] Considerando a gramática a seguir, qual das seguintes sentenças estão na linguagem gerada por essa gramática? G = ({S, A, B}, {a, b, c, d}, P, S) P = { < S > a < S > c < B > < A > b < A > c < A > c < B > d < A > } a) abcd b) acccbd c) acccbcc d) acd e) accc 31. [Sebesta, 2000] Escreva uma gramática para a linguagem consistindo em strings que têm n cópias da letra a seguida do mesmo número de cópias da letra b, em que n > 0. Por exemplo, as strings ab, aaaabbbb e aaaaaaaabbbbbbbb estão na linguagem, mas a, abb, ba e aaabb não estão. 32. [Sebesta, 2000] Desenhe árvores de análise para as sentenças aabcc e aaabbbc, como derivadas da gramática produzida no exercício 31. 33. [Sebesta, 2000] Usando as instruções da máquina virtual definida a seguir, apresente uma definição semântica operacional do seguinte: ident := var ident := ident + 1 ident := ident - 1 ident := var op_bin var ident := op_un var goto label if var relop var goto label ident é um identificador. var é um identificador ou uma constante. op_bin pode ser um dos operadores aritméticos do conjunto {+, -, *, /}. op_un pode ser um dos operadores unários do conjunto {+, -}. relop pode ser um dos operadores relacionais do conjunto {=, <>, >, <, >=, <=}. a) repeat do Pascal 3 de 6

b) for-downto do Pascal c) DO do FORTRAN da forma: DO N K = start, end, step d) if-then-else do Pascal e) switch do C 34. [Sebesta, 2000] Compute a pré-condição mais fraca para cada uma das seguintes instruções e póscondições de atribuição: a) a := 2 * (b 1) 1 {a > 0} b) b := (c + 10) / 3 {b > 6} c) a := a + 2 * b 1 {a > 1} d) x := 2 * y + x 1 {x > 11} 35. [Sebesta, 2000] Compute a pré-condição mais fraca para cada uma das seguintes sequencias das instruções de atribuição e suas pós-condições: a) a := 2 * b + 1; b := a 3; {b < 0} b) a := 3 * (2 * b + a); b := 2 * a 1; {b > 5} 36. [Sebesta, 2000] Escreva a função de correspondência semântica denotacional para as seguintes instruções: a) for do Pascal b) repeat do Pascal c) expressões booleanas do Pascal d) for do C e) switch do C 37. [Sebesta, 2000] Qual é a diferença entre um atributo intrínseco e um atributo sintetizado? 38. [Sebesta, 2000] Escreva uma gramática de atributos cuja base BNF seja a do Exemplo 3.6, mas cujas regras de linguagem sejam as seguintes: tipos de dados não podem ser misturados em expressões, mas as instruções de atribuição não precisam ter os mesmos tipos em ambos os lados do operador de atribuição. Exemplo3.6: Uma Gramática de Atributos para Instruções de Atribuição 1. Regra de sintaxe: <atribuição> <var> := <expr> <expr>.tipo_esperado <var>.tipo_efetivo 2. Regra de sintaxe: <expr> <var>[2] + <var>[3] <expr>.tipo_efetivo if(<var>[2].tipo_efetivo = int) e (<var>[3].tipo_efetivo = int) then int else real end if 4 de 6

3. Regra de sintaxe: <expr> <var> <expr>.tipo_efetivo <var>.tipo_efetivo 4. Regra de sintaxe: <var> A B C <var>.tipo_efetivo look-up(<var>.string) A função look-up pesquisa determinado nome de variável na tabela de símbolos e retorna o tipo desta. 39. [Sebesta, 2000] Escreva uma gramática de atributos cuja base BNF seja a do Exemplo 3.2 e cujas regras de tipo sejam as mesmas do exemplo de instrução de atribuição do Exemplo 3.6. Exemplo 3.2: Uma Gramática para Instruções de Atribuição Simples G = ({atribuição, id, expr}, {:=, +, *, (, ), A, B, C}, P, atribuição) < expr > < id > + < expr > < id > * < expr > ( < expr > ) < id > } Exemplo3.6: Uma Gramática de Atributos para Instruções de Atribuição 1. Regra de sintaxe: <atribuição> <var> := <expr> <expr>.tipo_esperado <var>.tipo_efetivo 2. Regra de sintaxe: <expr> <var>[2] + <var>[3] <expr>.tipo_efetivo if(<var>[2].tipo_efetivo = int) e (<var>[3].tipo_efetivo = int) then int else real end if 3. Regra de sintaxe: <expr> <var> <expr>.tipo_efetivo <var>.tipo_efetivo 4. Regra de sintaxe: <var> A B C <var>.tipo_efetivo look-up(<var>.string) A função look-up pesquisa determinado nome de variável na tabela de símbolos e retorna o tipo desta. 40. [Sebesta, 2000] Prove que o seguinte programa está correto: {x = Vx e y = Vy} temp = x; x = y; y = temp; {x = Vy e y = Vx} 5 de 6

41. [Sebesta, 2000] Prove que o seguinte programa está correto: {n > 0} cont = n; soma = 0; while cont <> 0 do soma = soma + cont; cont = cont - 1; end {soma = 1 + 2 +... + n} Descrevendo a Sintaxe e a Semântica 6 de 6