1 d=

Documentos relacionados
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

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

Analisador Léxico parte II

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

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

Introdução ao FLEX e expressões regulares

Introdução à Linguagem C

Programação: Vetores

Linguagem C: Introdução

Prof. Adriano Maranhão COMPILADORES

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

Resolução dos exercícios de LEX das aulas práticas de Processamento de linguagens LEX/YACC. Maria João Tinoco Varanda Pereira

Estrutura do programa

Material sobre Funções AEDS 1

Estrutura de Dados. Cadeia de Caracteres. Roberto Araujo Ago/2013

Outline. 33. Manipulação de arquivos DIM

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

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

Ambiente de desenvolvimento

Trabalho Linguagem e Programação de Compiladores

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

A Linguagem C. A forma de um programa em C

Funções de Entrada e Saída Formatada Constantes de barra invertida

MESMO QUE ESTAS VARIÁVEIS TENHAM NOME IDÊNTICOS

Algoritmos. Algoritmos. Linguagem de programação. Conceitos. Conceitos. Conceitos. Sintaxe do comando para incluir bibliotecas no programa:

Linguagem de Programação

INTRODUÇÃO À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015

Conceitos básicos de programação

Identificação do discente: Matrícula: Nome completo: Douglas Godeguez Nunes. Curso: Ciência da Computação

Modulo 9: Você define como éo dado... Struct e typedef

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR

Métodos Computacionais

Aula 12- Variáveis e valores reais

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07. Tópicos avançados

Linguagem C (estruturas condicionais)

Algoritmos RESUMO - LINGUAGEM C

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

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

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Material preparado pela profa Silvana Maria Affonso de Lara

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

Capítulo 2 Operadores. A função scanf()

ESTRUTURAS DE CONTROLE

Capítulo 1: Alfabetos, cadeias, linguagens

Introdução a Programação na Linguagem C.

Introdução à Programação em C

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Programação Básica. Estrutura de um algoritmo

Lógica e Linguagem de Programação Convertendo um algoritmo em pseudocódigo para a linguagem C Professor: Danilo Giacobo

Introdução à Ciência da Computação

Linguagens de Programação I

Gramática. Gramática. Gramática

4. Estruturas Fundamentais de Programação em C

Resumo da última aula. Compiladores. Tipos. Regras semânticas. Expressões de tipos. Análise Semântica e checagem de tipos.

Algoritmos e Estruturas de Dados I. Funções. Pedro Olmo Stancioli Vaz de Melo

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

11 - Estrutura de um programa em C

21 Variáveis estruturadas

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Introdução à Linguagem C Variáveis e Expressões

a * Expressões Regulares (ER)

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Introdução à Linguagem C

Como construir um compilador utilizando ferramentas Java

Introdução à Programação

Linguagens de Programação Conceitos e Técnicas. Amarrações

Elementos de programação em C

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Vetores. e o programa deverá ler os valores separadamente:

Introdução à linguagem C++

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1

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

Introdução a Programação de Jogos

LINGUAGEM C: ARRAY: VETORES E MATRIZES

Curso de Introdução à Liguagem de. Grupo PET-Tele. Universidade Federal Fluminense. July 16, 2012

Linguagem C Princípios Básicos (parte 1)

C Operadores e Expressões

Introdução ao Fortran 90. Aula 3

Estruturas de Repetição

Strings. Introdução. Definição de strings. Criação/Declaração de strings. Inicialização de strings. Manipulação de strings. Exemplos.

Linguagem C Funções. André Tavares da Silva.

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas

Introdução a Programação

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

LEX & YACC / FLEX & BISON. Uso prático... LEX: Tokenizer LEX & YACC / FLEX & BISON. Uso do Flex:

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza

1ª Lista de Exercícios

1 Exercícios com ponteiros

LINGUAGEM C PARA O 8051

INTRODUÇÃO À LINGUAGEM PASCAL PREFÁCIO

PHP INTRODUÇÃO DELIMITADORES DE CÓDIGO EXTENSÃO DE ARQUIVOS

Linguagem Python. Inteligência Artificial. Características de Python. Importando módulos. Módulos. Usando Python no modo interativo

Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes

Modificadores de Tipos

Expressões Regulares (ER) Uma ER sobre um alfabeto Σ é definida como: a) é uma ER e denota a linguagem vazia b) λ é uma ER e denota a linguagem conten

Transcrição:

O que faz/o que é Como usar / Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas / Exemplos The Lex & YACC page: http://dinosaur.compilertools.net/ Flex: versão livre http://simplesamples.info/c++/flex.php http://contentbuilder.merlot.org/toolkit/html/snapshot.php?i 1 d=5373359979478

A idéia é muito boa! Um gerador de programas... 2

O que faz Lex gera programas (em C) para análises léxicas simples, incluindo analisadores léxicos de compiladores. Utiliza Expressões Regulares (ER) Estendidas para definir a especificação da análise léxica desejada 3

Como Usar 1) editar arquivo (arq_ent) a ser submetido ao lex que é da forma de uma tabela: Padrão (ER estendida) Ação código C 2) Lex arq_ent gera lex.yy.c 3) Cc lex.yy.c ll se tudo correr bem gera a.out OBS: a biblioteca l fornece um main() que chama a função yylex(), assim não precisamos fazer o nosso programa principal. 4

4) a.out < teste_arq_ent > arq_saida gera a análise léxica 5

Como funciona a.out copia a entrada (teste_arq_ent) para a saída (arq_saida) exceto quando uma cadeia especificada como uma ER é encontrada na entrada, o que faz a ação associada a ela ser executada. Um exemplo de uma ação poderia ser imprimir o padrão encontrado: ER ECHO ou ER printf( %s, yytext) OBS: a cadeia que casa com a ER fica na variável acima, tem o tamanho copiado para yyleng e ocorre na linha yylineno 6

Regras para o casamento de padrões Lex privilegia a ER que dá o maior casamento Se houver 2 ou mais ER que casam o mesmo tamanho a ER que aparece 1o é privilegiada Temos que saber destas regras para escrever o arquivo de entrada! 7

Exemplos Suponha que tenhamos as regras: integer [a-z][a-z0-9]* identificador pré-definido identificador Se a entrada for integer, ambas regras casam e a 1a ganha Se a entrada for integers a 2a regra ganha pois casa com 8 caracteres Se a entrada for int a 2a ganha 8

O que fazer com Identificadores e palavras reservadas que tem o mesmo padrão??? A parte inteira de um número real que casa com números inteiros??? 9

Trecho de um arquivo Lex...parte das definições %% {DIGIT}+ { printf("an integer: %s (%d)\n", yytext, atoi(yytext)); } {DIGIT}+"."{DIGIT}* { printf("a float: %s (%g)\n", yytext, atof(yytext)); } if then begin end procedure function { printf("a keyword: %s\n", yytext); } {ID} printf("an identifier: %s\n", yytext);... regras continuam... 10

Respondendo Identificadores e palavras reservadas que tem o mesmo padrão??? Coloquem as reservadas primeiro, pois a primeira regra é privilegiada A parte inteira de um número real que casa com números inteiros??? Lex prefere os maiores casamentos, assim 2.3 vai casar somente com {DIGIT}+"."{DIGIT}* 11

Formato Geral do arquivo submetido ao Lex Definições %% Regras %% Subrotinas do usuário Menor programa Lex: %% Copia a entrada para a saída sem alteração OBS: as regras tem o formato ER 1oumaisbrancos Ação O 2o %% é opcional e aparece somente se há subrotinas do usuário que são copiadas para o arquivo lex.yy.c 12

Definições Usadas para simplificar as ER nome definição 1a posição, segue padrão do C para variáveis 13

A definição pode ser referenciada por {nome} que expandirá para {definição} Exemplo: Digito [0-9] Letra [a-za-z] Na parte de Regras, o uso das definições é assim: %% {Digito}+. {Digito}*...ação aqui... que é idêntica ao padrão para buscar 1 ou mais dígitos seguidos de. seguidos de zero ou mais dígitos: [0-9]+. [0-9]* 14

a [aa] b [bb]... z [zz] Outros exemplos de definições úteis para serem usados na parte das Regras para Pascal: {a}{n}{d} {a}{r}{r}{a}{y}... 15

Definições Se usarmos o padrão abaixo nessa parte: %{ %} O que estiver entre os delimitadores vai ser copiado para a área externa de definição do lex.yy.c. Exemplo: %{ /* need this for the call to atof() below */ #include <math.h> /* need this for printf(), fopen() and stdin below */ #include <stdio.h> %} 16

Se usarmos os delimitadores na área das regras, antes das regras de casamento de padrão: o código vai aparecer no lex.yy.c depois das declarações de variáveis da função yylex() e antes da primeira linha de código Isso é bom para definição de cabeçalhos, por exemplo: TOKEN CÓDIGO Definições %% %{ printf( \n\n, TOKEN %} CÓDIGO ) 17

Regras: Padrão Ação O padrão não deve ser indentado e a ação começa na mesma linha Um padrão é expresso com ER estendidas que podem conter os seguintes operadores: \ [ ] ^ -?. * + ( ) $ / { } % < > Que para serem utilizados como texto comum devem aparecer como o caractere de escape \ ou entre aspas. Exemplo: xyz ++ ou xyz++ ou xyz\+\+ 18

ER estendidas Classe de caracteres Caractere. Opcionalidade Repetições União e agrupamento Sensibilidade ao contexto Repetições e Definições 19

Classe de caracteres Podem ser especificadas utilizando o par de operadores [ ]. [abc] associa a um simples caractere a possibilidade de ser a, b, ou c Dentro dos colchetes, o significado dos operadores são ignorados. Somente 3 caracteres são especiais: \ - ^ - Indica intervalo, por exemplo: [a-z0-9_] Se quiser incluir - ela deve ser a primeira ou a última. Por exemplo: [-+0-9] 20

Classe de caracteres ^ deve aparecer como o primeiro caractere depois do colchete esquerdo indicando o complemento. Por exemplo: [^abc] associa todos os caracteres exceto a b ou c, incluindo todos os especiais e de controle. [\40-\176] associa todos os caracteres imprimíveis do conjunto ASCII (uso de octais) 21

O caractere. (ponto) O. associa quase todos caracteres. É a classe de todos menos \n Tomem cuidado ao usá-lo. Geralmente é o último a ser usado num arquivo submetido ao lex. 22

Expressões Opcionais & Repetições O operador? Indica um elemento opcional de uma expressão Por exemplo: ab?c associa ac ou abc Repetições são indicadas pelo operador + ou * a* indica zero ou mais a s consecutivos a+ indica 1 ou mais instâncias de a s Exemplo: [a-z]+ 23

União e Agrupamento O operador indica união. Por exemplo: (ab cd) associa ab ou cd. Os parênteses são utilizados para agrupar embora não necessários a não que queiramos mudar a ordem de precedência dos operadores 24

Sensitividade ao contexto Embora pequena, Lex usa dois operadores para isso: ^ $ Se o primeiro caractere de uma expressão é ^ a expressão somente é associada se estiver no começo de uma linha Se o último caractere é $ a expressão é associada somente se estiver no fim da linha A expressão ab$ é a mesma de ab\n 25

Repetições e o separador % Os operadores { } especificam ou repetições (se fecham números) ou expansão de definições (já vista). a{1,5} procura por 1 a 5 ocorrências de a a{2,} duas ou mais ocorrências a{4} exatamente 4 ocorrências % separa trechos de fontes Lex 26

ER estendidas x the character "x" "x" an "x", even if x is an operator. \x an "x", even if x is an operator. [xy] the character x or y. [x-z] the characters x, y or z. [^x] any character but x.. any character but newline. ^x an x at the beginning of a line. <y>x an x when Lex is in start condition y. x$ an x at the end of a line. x? an optional x. x* 0,1,2,... instances of x. x+ 1,2,3,... instances of x. x y an x or a y. (x) an x. x/y an x but only if followed by y. {xx} the translation of xx from the definitions section. x{m,n} m through n occurrences of x 27

Ações Lex A ação mais simples é ignorar a entrada usando o comando nulo do C. Exemplo: [ \t\n] ; \t \n ; ou As aspas não são necessárias! 28

Exemplo de arquivo Lex - 1 %{ /* need this for the call to atof() below */ #include <math.h> /* need this for printf(), fopen() and stdin below */ #include <stdio.h> %} DIGIT [0-9] ID [a-z][a-z0-9]* 29

%% {DIGIT}+ { printf("an integer: %s (%d)\n", yytext, atoi(yytext)); } {DIGIT}+"."{DIGIT}* { printf("a float: %s (%g)\n", yytext, atof(yytext)); } if then begin end procedure function { printf("a keyword: %s\n", yytext); } {ID} printf("an identifier: %s\n", yytext); "+" "-" "*" "/" printf("an operator: %s\n", yytext); "{"[^}\n]*"}" ; /* eat up one-line comments */ [ \t\n]+ ; /* eat up white space */. printf("unrecognized character: %s\n", yytext); 30

%% int main(int argc, char *argv[]) { } ++argv, --argc; /* skip over program name */ if (argc > 0) else yylex(); yyin = fopen(argv[0], "r"); yyin = stdin; 31

Exercício Modelar o reconhecimentos de TOKENS da linguagem C, via ER estendidas do Lex Testar o reconhecimentos com programas em C cuja saída do lex tabule cada token e seu código. 32