Folha 3 - Análise léxica

Documentos relacionados
Folha 3 - Análise léxica

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Compiladores - Análise Léxica

Compiladores - Análise Léxica

Compiladores. Análise Léxica

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07

Analisador Léxico parte II

Folha 2 Autómatos e respectivas linguagens

Expressões e Gramáticas Regulares e Autómatos Finitos

Programa fonte token padrões lexema Tokens

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Prof. Adriano Maranhão COMPILADORES

Compiladores 04 Analise léxica Jflex. Prof José Rui

Introdução à Programação em C (II)

Compiladores 02 Analise léxica

Compiladores. Análise Léxica

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

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C

Papel do analisador léxico: ler o arquivo fonte em busca de unidades significativas (os tokens) instanciadas por lexemas ou átomos.

Identificadores Nome de variáveis, constantes, métodos, etc...

Linguagens de Programação

COMPILADORES. Análise léxica. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

a * Expressões Regulares (ER) AF e ER Equivalências entre AFD, AFND, AF-, ER

Autómatos Finitos Determinísticos (AFD)

IV.2 Aspectos Léxicos Convencionais

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Como construir um compilador utilizando ferramentas Java

Introdução à Programação em C Input / Output

DEP. INFORMÁTICA - UNIVERSIDADE DA BEIRA INTERIOR

Compilação da linguagem Panda

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Programação de Computadores

Análise Léxica. O papel do analisador léxico

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

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

O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page:

Utiliza Expressões Regulares (ER) Estendidas para definir a especificação da análise léxica desejada

Exercicios. 7.2 Quais das seguintes afirmações são verdadeiras? Justifica. (d) abcd L((a(cd) b) )

Introdução à Programação

A linguagem C (visão histórica)

1 d=

Descrição da Linguagem DECAF

Compiladores - Especificando Sintaxe

Compiladores - Autômatos

Familiarização com a ferramenta JavaCC

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Linguagens e Programação Automátos Finitos. Paulo Proença

3.1 - Funções para manipular dados de entrada e saída padrão

Linguagens Formais e Problemas de Decisão

Python e sua sintaxe LNCC UFRJ

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

3. Linguagem de Programação C

Compilador de LP3 para C3E e P3

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Ocorrem em três tipos:

Tokens, Padroes e Lexemas

Folha 4.2 Análise sintática ascendente

Linguagens de Programação Aula 5

Descrição da Linguagem Pascal Jr.

Programação de Computadores III

Conceitos de Linguagens de Programação

CONJUNTOS RELAÇÕES DE PERTINÊNCIA, INCLUSÃO E IGUALDADE; OPERAÇÕES ENTRE CONJUNTOS, UNIÃO, INTER- SEÇÃO E DIFERENÇA

Introdução à Programação em C

Introdução ao FLEX e expressões regulares

Estrutura geral de um compilador programa-fonte

Construção de um compilador para a linguagem Panda

FORMATO DO PROGRAMA FONTE

Programação de Computadores III

Alfabeto, Cadeias, Operações e Linguagens

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

Aula 03: Introdução a C

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Linguagens e Programação FLEX. Paulo Proença

Algoritmos e Programação

Linguagens de Programação Aula 3

Sintaxe da linguagem Java

Análise Sintática Introdução

Lex Adaptação da obra original de Tom Niemann

Construção de Compiladores Aula 3 - Analisador Sintático

11 - Estrutura de um programa em C

Introdução à Programação em C (I)

Número: Nome: 1. (3.0 val.) Considere um analisador lexical contendo a sequência ordenada de

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

Curso de Engenharia de Computação - UTFPR Teoria da Computação - Prof. Celso Kaestner Lista de exercícios

Compiladores I Prof. Ricardo Santos (cap 1)

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

DEP. INFORMÁTICA - UNIVERSIDADE DA BEIRA INTERIOR

Linguagem C: Introdução

COMPILAÇÃO. Ricardo José Cabeça de Souza

Programação de Computadores:

Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem

Faculdade de Computação

Compiladores. Conceitos Básicos

Linguagem C. Prof.ª Márcia Jani Cícero

Transcrição:

Folha 3 Análise léxica 1. Escrever um programa em FLEX que permite contar o número de ocorrências de uma cadeia de caracteres contida num ficheiro de texto. 2. Escrever um programa em FLEX que permite substituir uma cadeia de caracteres por outra contidas num ficheiro de texto. 3. Escrever um programa em FLEX que dado um ficheiro de texto, mostre: o número de algarismos; o número de vogais do alfabeto; o número de consoantes do alfabeto; o número de linha de texto; o número de espaços ou tabulações (\t); o número de caracteres não identificados nos pontos anteriores. 4. Escrever um programa em FLEX para identificar números naturais contidos num texto. Exemplo: Entrada: 123 abc 12.45 s 245 xyz xyz 2 abc 45 cc Saída: 123 12 45 245 2 45 5. Escrever um programa em FLEX que permite contabilizar os números inteiros com 1 algarismo, com 2 algarismos e com 3 ou mais algarismos, contidos num ficheiro de texto. 6. Escrever um programa em FLEX que permite identificar números inteiros (com ou sem sinal) contidos num ficheiro de texto. 7. Escrever um programa em FLEX que permite identificar números com parte decimal (com ou sem sinal) contidos num ficheiro de texto. 8. Escreva um programa FLEX que copie um ficheiro, substituindo cada sequência não nula de espaços em branco por um único espaço. 9. Escreva um programa FLEX que copie um ficheiro, substituindo cada sequência não nula de digítos (número) pela palavra NÚMERO. 10. Escreva um programa FLEX que copie um programa em C, substituindo todas as instâncias de FLOAT por REAL.

2 11. Escrever um programa em FLEX que construa dois vectores com os números inteiros e com os números reais contidos num ficheiro de texto. No final, deve mostrar estes vectores. 12. Implementar um programa em FLEX que elimine de um programa em C todos os comentários e caracteres de espaço. 13. Escreva expressões regulares para as seguintes linguagens e implemente autómatos finitos em C e em Lex para as mesmas: a) palavras com V = { a, b, c } em que o primeiro a precede o primeiro b. b) palavras com V = {a, b, c} com n umero par de a s. c) números binários múltiplos de 4. d) números binários maiores que 101001. e) palavras em V = { a, b, c } que não contêm a substring baa. 14. Para as seguintes expressões regulares, implemente em C e em Lex um autómato finito determinístico que as reconheça: if then else [az][az09]* [09]+ ( [az]* \n ) ( \n \t ) 15. Considere os seguintes tokens e as respetivas expressões regulares t1 aa* t2 c(a+b)* t3 ab*c t4 caa* t5 b*aa*(c+b) t6 aab*a t7 (a+c)*abb(c+b)* t8 a*bc* t9 (a+(bc)*d) + t10 (a+(bc)*b) + a) Construa um autómato finito determinista para reconhecer cada token. b) Codifique em C e em FLEX o reconhecedor de cada token. 16. Considere a seguinte especificação para nomes de objetos numa linguagem: [ <class>: ] [ // <address>/ ] <path> A notação deve ser interpretada da seguinte forma: os parênteses retos [ ] delimitam partes opcionais de um nome; os caracteres < > delimitam os seguintes padrões: (i) <class> é um identificador; (ii) <address> é uma lista de identificadores separados por. ; (iii)<path> é uma lista de identificadores separados por /. um identificador é uma sequência de uma ou mais letras e dígitos, iniciada por uma letra. a) Construa um programa em FLEX para reconhecer cada um daqueles padrões. b) Construa um AFD e programeo em C para reconhecer cada um daqueles padrões. c) Construa um programa em FLEX para reconhecer todos os nomes de objetos da linguagem. d) Construa um AFD e programeo em C para reconhecer todos os nomes de objetos da linguagem. Folha prática 3 Análise léxica

3 17. Considere a seguinte especificação dos tokens de L, definidos de acordo com as seguintes regras: os números podem ser escritos na base 2 (i.e., com o alfabeto {0, 1}), na base 8 (i.e., com o alfabeto {0,, 7}) e na base 10 (i.e., com o alfabeto {0,, 9}); os identificadores são escritos como sequências de dígitos decimais e de caracteres (letras, _, $, %) que começam por uma letra e não terminam com os caracteres _, $ e %; os comentários são sequências de caracteres (letras, _, $, %) entre /* e */; os números reais (e.g., 5, 4E5, 3.8, 29.6E15, 7E3), são representados por ponto flutuante, com um ponto decimal antecedido e precedido por uma sequência de um ou mais dígitos, e o expoente com o máximo de 2 dígitos, sendo o primeiro dígito diferente de 0. Não se consideram os 0 s não significativos à esquerda e à direita do ponto decimal. a) Construa um programa em FLEX para reconhecer os tokens de L. b) Construa um AFD e programeo em C para reconhecer os tokens de L. 18. Considere uma linguagem de programação, de nome Graphics, que permite desenhar polígonos a partir de instruções. Um ponto é representado por ( number, number ), onde number denota um número inteiro maior ou igual a 0. Uma instrução é uma sequencia de pontos separados por ; que começa por POLY e termina com END. Um programa é uma sequência de instruções. Um exemplo de um programa para desenhar o polígono é dado pela instrução POLY (10,40) ; (50,90) ; (40,45) ; (50,0) END. a) Identifique os tokens da linguagem Graphics. b) Construa um programa em FLEX para reconhecer os tokens da linguagem. c) Construa um AFD e programeo em C para reconhecer os tokens da linguagem. 19. Faça um analisador léxico que extrai de um documento de texto todos os endereços de email contidos. Assuma que os caracteres não permitidos num endereço de email são \t, \n, {, }, espaço, ponto e vírgula, vírgula e aspas. Lembrese também que não pode haver dois @ nem dois pontos seguidos. Este analisador deve apenas produzir a lista de endereços, separados de vírgula e espaço. Ou seja, prontos para serem copiados diretamente para um cliente de email. Por exemplo, o texto: O endereço do João Fonseca é jfonseca@gmail.com e o do Carlos Meireles é meiras@hotmail.com. Para os outros, estão na lista abaixo: mariliaf@student.deeei.uq.tp; mfon{s}@kkks.us gilaroi@yaaahooo.com; gil eanes@grlah.jh daria o seguinte resultado: jfonseca@gmail.com, meiras@hotmail.com, mariliaf@student.deeei.uq.tp, gilaroi@yaaahooo.com, eanes@grlah.jh Folha prática 3 Análise léxica

4 20. Considere a seguinte especificação de um tipo de documentos XML <!ELEMENT id (expr)> A notação deve ser interpretada da seguinte forma: id é uma sequência de uma ou mais letras (maiúsculas ou minúsculas), dígitos e os caracteres _, e :, não podendo começar por um dígito ou :. expr é uma sequencia sobre o alfabeto {#PCDATA,,, *,?} que: começa por #PCDATA, tem, ou entre dois #PCDATA s, podendo ainda cada #PCDATA ser seguido por * ou por?. a) Construa um programa em FLEX para reconhecer este tipo de documentos. b) Construa um AFD e programeo em C para reconhecer este tipo de documentos. 21. Considere a seguinte tabela de tradução de padrões de expressões regulares para tokens Expressão regular Token Valor de atributo ws if then else id num < <= = <> > >= if then else id num apontador para entrada da tabela apontador para entrada da tabela LT LE EQ NE GT GE a) Construa um programa em FLEX para reconhecer os tokens da tabela anterior. b) Construa um AFD e programeo em C para reconhecer os tokens da tabela anterior. 22. Implementar um préprocessador de C, que expanda macros definidas por #define, ficheiros incluídos com #include e elimine os comentários. 23. Implementar um analisador léxico para um subconjunto da linguagem C, com os construtores usuais: for while break if then else... e a pontuação usual:, : ; ( ) { } [ ] < > <= >= ==!=... Teste o analisador obtido com programas em C. Folha prática 3 Análise léxica

5 24. Dado um ficheiro.srt (de legendas de filmes), fazer um analisador léxico para adiantar/atrasar essas legendas de acordo com um valor de x segundos e programálo em C e FLEX. Exemplo do formato de um ficheiro.srt: 1 00:00:45,000 > 00:00:50,400 Hello 2 00:00:50,300 > 00:00:53,200 Goodbye Neste exemplo serão geradas duas legendas. A primeira, será apresentada no filme aos 45 segundos durante cerca de 5,400 segundos. A segunda, será apresentada no filme aos 50,300 segundos durante cerca de 2,900 segundos. 25. Faça um analisador léxico que transforme, no texto de input, todas as minúsculas em maiúsculas (e mantenha tudo o resto igual) e programeo em C e FLEX. 26. Faça um analisador léxico que transforme, no texto de input, todas as palavras iniciadas com uma letra maiúscula (e mantenha tudo o resto igual) e programeo em C e FLEX. 27. Implemente em FLEX e C um analisador léxico para reconhecer números inteiros e reais escritos em qualquer representação (científica, sinal, etc). Exemplos: 1 ; 1.0 ; 1 ; 1.0 ; 1.99 ; 0.99 ; 1.0E05 ; 0.99E05... 28. Implemente em FLEX e C um analisador léxico para reconhecer números de telefone, indicado para cada um deles a rede a que pertence, segundo a seguinte tabela: Rede Indicativo VODAFONE 91 NOWO 92 NOS 93 MEO 96 FIXA (Lisboa) 21 FIXA (Porto) 22 FIXA (Ilhas) 29 FIXA (outros) 2[38] Teste usando o ficheiro NumerosTelefone.txt que se encontra na página da disciplina. Folha prática 3 Análise léxica