Analisador Léxico parte II

Documentos relacionados
Compiladores. Análise Léxica

Compiladores I Prof. Ricardo Santos (cap 1)

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

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

Introdução à Programação

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

IV.2 Aspectos Léxicos Convencionais

Compiladores 02 Analise léxica

Compiladores. Análise Léxica

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison

Folha 3 - Análise léxica

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

Prof. Adriano Maranhão COMPILADORES

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Compiladores. Introdução

Familiarização com a ferramenta JavaCC

Introdução ao FLEX e expressões regulares

Compiladores - Análise Léxica

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

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

Como construir um compilador utilizando ferramentas Java

Construção de Compiladores Aula 2 - Analisador Léxico

Compiladores - Análise Léxica

Como construir um compilador utilizando ferramentas Java

Compiladores. Introdução à Compiladores

Compiladores. Conceitos Básicos

Compiladores - JACC. Fabio Mascarenhas

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

Linguagens de Programação Aula 3

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

Compiladores Aula 1. Celso Olivete Júnior.

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Compiladores. Fabio Mascarenhas

Conceitos de Linguagens de Programação

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

As fases de um compilador

Tokens, Padroes e Lexemas

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

Introdução aos Compiladores

Tratamento dos Erros de Sintaxe. Adriano Maranhão

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

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

As fases de um compilador

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Programa fonte token padrões lexema Tokens

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Paradigmas de Linguagem de Programação. Aspectos Básicos

Ambiente de desenvolvimento

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

Compiladores. Análise Semântica

Descrição da Linguagem Pascal Jr.

Compiladores Aula 3. Celso Olivete Júnior.

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Noções de compilação

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Introdução à Linguagem C

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

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

Autômatos e Linguagens

Desenvolvimento de Aplicações Desktop

Conceitos de Linguagens de Programação

Estrutura geral de um compilador programa-fonte

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

COMPILADORES. Análise semântica. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Compiladores Prof. a Mariella Berger. Trabalho 2 Analisador Léxico

Computação 2. Aula 3. Diego Addan Vetores de caracteres (strings)

Projeto de Compiladores

Compiladores. Prof. Bruno Moreno

Linguagem C: Introdução

Compiladores - JFlex. Fabio Mascarenhas

PROGRAMAÇÃO I. Introdução

Construção de Compiladores

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

Histórico e motivação

Transcrição:

Analisador Léxico parte II Compiladores Mariella Berger

Sumário Definições Regulares Gerador de Analisador Léxico Flex Exemplos

As fases de um Compilador Análise Léxica Análise Sintática ANÁLISE Análise Semântica Gerador de Código Intermediário Otimizador de Código SÍNTESE Gerador de Código

Analisador Léxico O analisador léxico lê o programa fonte (caractere por caractere) e retorna os tokens formadores deste; Um token descreve um padrão de caracteres tendo algum significado no programa fonte: Identificadores Operadores Palavras chave Números Delimitadores, etc

Análise Léxica montante := deposito_inicial + 60; montante Identificador := Símbolo de atribuição deposito_inicial Identificador + Símbolo de adição 60 Número ; Símbolo ponto e vírgula

Exemplo de Tokens

Como descrever Tokens Expressões regulares Em pascal, um identificador é uma letra seguida por zero ou mais letras ou dígitos letra ( letra dígito ) *

Notação de Expressões Regulares

Exemplos

Exercícios Defina expressões regulares para: Números Romanos Endereços de ips Placas de carros Números de telefones celulares no Brasil Prefixos de rádios FM (102,3 MHz) Número de matrícula na UFES URL de páginas Web

Definições Regulares Os números sem sinal em Pascal são cadeias tais como 5280, 39.37 e 1.87E4. A seguinte definição regular corresponde a essa classe de cadeias: Dígito 0 1... 9 dígitos dígito+ /* um ou mais dígito */ fração_opcional (.dígitos)? /*? 0 ou 1 ocorrência */ expoente_opcional (E(+ )?dígitos)? Num digitos fração_opcional expoente_opcional

Geradores de Analisadores Lexicos O Flex serve para gerar automaticamente programas (em C) fazendo a leitura de uma entrada, de modo a varrer um texto e/ou programa a fim de obter uma sequência de unidades léxicas (tokens). Os tokens gerados pelos programas criados pelo Flex serão usualmente processados posteriormente por um programa que realizará a analise sintática. Entrada: Arquivo de descrição do analisador léxico Saída: Programa na linguagem C que realiza a análise léxica (default: lex.yy.c)

Geradores de Analisadores Lexicos Outros geradores de analisadores léxicos: TPly TP Lex / Yacc => Gera um programa em PASCAL (scanner em Pascal) JavaCC => Para linguagem Java Flex++ ou Flexx => Para linguagem C++ (orientado a objetos)

Flex Um programa Flex é constituído de 3 partes: Seção de Declarações %% Regras de Tradução (Produções) %% Procedimentos Auxiliares

Exemplo 1

Flex

Compilando um arquivo Flex flex -o<arq_saida.c> <arq_def.l> *.l => Arquivos que contêm as definições das unidades léxicas a serem identificadas. Contém um conjunto de especificações de expressões regulares que serão usadas para reconhecer os tokens. *.c => Arquivo do programa C que implementa o analisador léxico especificado. Principais opções do FLEX: -i => Case Insensitive (ignora diferença entre maiúscula/minúsculas) --version => Exibe a versão atual do programa flex em uso -+=> Geração de código de saída em C++

Compilando um arquivo Flex gcc <arq_saida.c> -o <arq_executavel> -lfl Observações importantes sobre a geração do programa de análise léxica: É necessário linkar (-l) uma bibliotec ( lib ) do analisador léxico na compilação do código gerado. O FLEX usa a lib fl. O programa gerado pode ser executado, onde usualmente a entrada do texto a ser analisado é feita pela stdin (teclado).

Exemplo 1

Exemplo 2

Expressoes regulares [0-9] => Reconhece um dígito [a-za-z] => Reconhece uma letra (comum sem acentos) [ \t\n] => Reconhece um espaço em branco ou um tab ou uma nova linha xxxxx => Reconhece a seqüência de caracteres xxxxx

Metacaracteres

Exercicio 1. Escrever um programa que permite contar o número de ocorrências de uma cadeia de caracteres; 2. Escrever um programa que dado um texto, mostra: 1. número de algarismos; 2. número de letras do alfabeto; 3. número de linha de texto; 4. número de espaços ou tabulações (\t); 5. número de caracteres não identificados nos pontos anteriores;

Exercícios 3. Escrever um programa que permite identificar números naturais; Entrada: 123 abc 12.45 s 245 xyz Saída: 123 12 45 245 4. Escrever um programa que permite identificar números inteiros (com ou sem sinal); 5. Escrever um programa que permite identificar números com parte decimal (com ou sem sinal).