Tokens, Padroes e Lexemas

Documentos relacionados
Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Compiladores. Análise Léxica

Linguagens de Programação Aula 5

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

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

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

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

IV.2 Aspectos Léxicos Convencionais

Interfaces de Vanguarda do Compilador

Conceitos de Linguagens de Programação

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

Análise Sintática Introdução

Python e sua sintaxe LNCC UFRJ

Análise Sintática. Fabiano Baldo

Compiladores Aula 3. Celso Olivete Júnior.

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

Análise sintática. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita

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

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

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

Eduardo Belo de Araújo. Analisador ANSI-C

Compiladores. Análise Sintática

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

Construção de Compiladores Aula 16 - Análise Sintática

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

Prof. Adriano Maranhão COMPILADORES

CP Compiladores I Prof. Msc.. Carlos de Salles

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

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

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012

Compiladores - Especificando Sintaxe

Compiladores 02 Analise léxica

Introdução à Programação

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

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

Como construir um compilador utilizando ferramentas Java

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Revisão. Fases da dacompilação

Compiladores I Prof. Ricardo Santos (cap 1)

Análise Sintática Bottom-up

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Estrutura geral de um compilador programa-fonte

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

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Analisador Léxico parte II

FACULDADE LEÃO SAMPAIO

Tradução Dirigida Pela Sintaxe

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

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

Compiladores - Gramáticas

Construção de Compiladores

Análise sintática. Análise sintática ascendente. Bottom-up, ascendente ou redutiva. Analisadores de precedência de operadores Analisadores LR

Compiladores - Gramáticas

Especificações Gerais do Compilador e Definição de FRANKIE

Compiladores. Análise Léxica

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

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

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

Compiladores - Análise Léxica

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Linguagens Livres do Contexto. Adaptado de H. Brandão

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

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos?

Compiladores - Análise Léxica

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

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Familiarização com a ferramenta JavaCC

INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto

Descrição da Linguagem Pascal Jr.

Compiladores: P ASCAL jr

Lembrando análise semântica. Compiladores. Implementação de esquemas de tradução L-atribuídos. Exemplo de implementação top-down (1)

Análise Sintática LL(1)

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

Linguagens Livres de Contexto

Compiladores - Análise LL(1)

Universidade Federal de Alfenas

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

Compiladores - Análise LL(1)

Autômatos e Linguagens

Tratamento dos Erros de Sintaxe. Adriano Maranhão

FOLHA DE PROVA. Descreva e ilustre, com um exemplo, o algoritmo de minimização de um autômato.

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Linguagens de Programação Aula 4

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

Compiladores. Conceitos Básicos

Compiladores - Análise Recursiva

Compiladores. Parser LL 10/13/2008

CP Compiladores I Prof. Msc. Carlos de Salles

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Programa fonte token padrões lexema Tokens

Compiladores - Análise Recursiva

Lex Adaptação da obra original de Tom Niemann

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

Folha 3 - Análise léxica

Compiladores Aula 1. Celso Olivete Júnior.

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Transcrição:

O Papel do Analisador Lexico A analise lexica e a primeira fase de um compilador e tem por objetivo fazer a leitura do programa fonte, caracter a caracter, e traduzi-lo para uma sequencia de símbolos lexicos denominados tokens, os quais sao utilizados pelo analisador sintatico. Exemplos: de tokens sao os identiicadores, palavras reservadas, operadores da linguagem, etc. A interacao entre analise lexica e sintatica e normalmente implementada fazendo-se com que o analisador lexico seja uma subrotina ou co-rotina do parser. Ao receber do parser um comando do tipo \obter proximo token", o analisador lexico lê os caracteres de entrada ate que possa identiicar o proximo token. Um analisador lexico classico pode ser entendido como um sistema de estados initos e utiliza-se um automato inito para sua implementaçao. As principais características desse automato:alfabeto de entrada sao os caracteres pertencentes ao arquivo fonte ² Cada estado inal reconhece uma classe especíica de tokens da linguagem fonte e denominado erro lexico durante o processo de analise lexica) que impossibilite a interpretaçao de um token. Uma lista de tokens e o resultado do processo de analise lexica, caso nenhum erro lexico tenha sido encontrado. Porque efetuar analise lexica? Simpliicaçao de Projeto e mais simples implementar dois analisadores distintos para tarefas distintas do que um analisador sintatico que faça todo trabalho de forma uniicada; Melhor Eiciencia a analise lexica e potencialmente mais lenta que a sintatica (pois efetua leitura de caracteres em disco). Tecnicas de buferizaçao de leitura podem acelerar signiicativamente este processo; Portabilidade as peculiaridades do alfabeto de entrada de cada linguagem podem ser tratadas exclusivamente pelo scanner. Tokens, Padroes e Lexemas Um token e um símbolo terminal da gramatica da linguagem fonte sob analise. Existem diversas cadeias de caracteres para as quais o mesmo token e gerado. Essas cadeias respeitam um determinado padrao ou regra associada a esse token. Um lexema e um conjunto de caracteres que e reconhecido pelo padrao de um determinado token. Exemplo: const pi = 3.14159; a subcadeia pi e um lexema para o token \identiicador", pois respeita o padrao para os identiicadores (letra)(letra j digito). Atributos para os tokens Um token e comumente representado como um par [LEXEMA, CLASSE], onde a classe indica qual foi o padrao utilizado para reconhecer o lexema.

Outras informaçoes adicionais podem ser incorporadas µa descriçao do token, de acordo com as necessidades das fases subseqäuentes, como por exemplo, numero da linha e coluna onde o token foi reconhecido no arquivo fonte e numero de caracteres lidos ate o reconhecimento, seria exemplos de informaçoes adicionais uteis caso um erro lexico seja detectado. 3.2 Buferizaçao de Entrada Conforme ja visto, o processo de analise lexica e normalmente realizado efetuando-se uma leitura do arquivo fonte de entrada, caracter a caracter, o que resulta em um processo signiicativamente lento. Existem 3 alternativas de implementaçao de analisadores lexicos (listados em ordem crescente de complexidade de implementaçao): 1. Usar ferramentas de construçao de analisadores lexicos (como o Lex), atraves de expressoes regulares; 2. Escrever um programa numa linguagem de programaçao convencional, usando seus recursos de entrada e saída; 3. Escrever um programa numa linguagem de montagem e manipular explicitamente a entrada e a saída. Alguns aspectos a serem considerados no projeto de implementaçao de um scanner: Bu er Em muitas linguagens, existem momentos que o analisador lexico precisa examinar varios caracteres µa frente do lexema, antes que seja anunciado um reconhecimento. Os caracteres que foram lidos e nao foram \aproveitados" no lexema sob analise, sao entao, devolvidos ao uxo de entrada para que possam ser lidos novamente na analise de outro lexema posterior. Assim sendo, um bu er de entrada que acumula varios caracteres e criado, conforme a igura 3.2. O processo de analise lexica e realizado sobre este bu er. Os tokens que foram reconhecidos sao eliminados do bu er e novos caracteres sao adicionados a ele ate que todo o arquivo fonte seja lido e analisado. Especiicaçao e Reconhecimento de Tokens A especiicaçao de tokens e feita atraves de expressoes regulares e reconhecida atraves dos

reconhecedores de gramaticas regulares chamados de automatos initos. Esta gramatica e capaz de reconhecer numeros inteiros como 1, 100, 1234, etc. e tambem numeros reais expressos ou nao por notaçao exponencial como: 1.5, 10.34, 1.3e15, 1E+2; porem, e incapaz de reconhecer numeros como 1., sem a parte fracionaria. A igura 3.3 reconhece esta gramatica, enquanto que a igura 3.4 reconhece identiicadores simples. O reconhecimento de strings e apresentado na igura 3.5, onde \caracteres validos" representa o alfabeto valido para strings, geralmente letras, numeros, espaços e sinais ortograicos. Erros Lexicos 1. `Caracter Invalido' : uso de um caracter (simbolo) de entrada (arquivo fonte) que nao pertença ao alfabeto da linguagem. 2. `Delimitador Nao Balanceado': deiniçao de uma cadeia literal (ou constante caracter) sem o correto balanceamento das aspas. Exemplo: \Entrada de Dados 3. `Numero Real Invalido' : deiniçao incorreta ou incompleta de um numero real. Exemplos: 1., 1.0e3,.8, 1e+ Erros Lexicos 1. `Caracter Invalido' : uso de um caracter (simbolo) de entrada (arquivo fonte) que nao pertença ao alfabeto da linguagem. Exemplo: # ou % 2. `Delimitador Nao Balanceado': deiniçao de uma cadeia literal (ou constante caracter) sem o correto balanceamento das aspas. Exemplo: \Entrada de Dados 3. `Numero Real Invalido' : deiniçao incorreta ou incompleta de um numero real. Exemplos: 1., 1.0e3,.8, 1e+ Analise Sintatica Ascendente - BOTTOM UP A criaçao da arvore gramatical e realizada no sentido folhas! raiz, ou seja, geraçao de sentenças e feita atraves do processo de empilhar e reduzir. A ideia e \reduzir" a sentença original ate o axioma da gramatica atraves de sucessivas substituiçoes por nao-terminais. Exemplo: S! aabe A! Abc j b B! d Veriicar se a sentença abbcde pode ser reduzida pela gramatica: Analise Sintatica Descendente - TOP DOWN

A analise sintatica top-down pode ser vista como uma tentativa de se encontrar uma derivaçao mais µa esquerda para uma cadeia de entrada, ou ainda, como de se construir a arvore gramatical a partir da raiz em direçao µas folhas. O processo de analise pode ser feito de forma recursiva ou nao, onde a forma recursiva pode ser realizada com ou sem retrocesso (backtracking), dependendo das regras de produçao gramatica. Analise Sintatica Recursiva com Retrocesso A construçao da arvore e feita a partir da raiz, expandindo sempre o nao-terminal mais µa esquerda primeiro. Quando existe mais de uma regra de produçao para o nao-terminal a ser expandido, a opçao escolhida e funçao do símbolo corrente na ita de entrada (token sob analise). Se o token nao deine a produçao a ser usada, entao todas as alternativas vao ser tentadas ate que se obtenha sucesso.

Please download full document at www.docfoc.com Thanks