Análise Léxica. Sumário



Documentos relacionados
Compiladores - Análise Léxica

Compiladores - Análise Léxica

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

Python e sua sintaxe LNCC UFRJ

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


Um Tradutor Dirigido por Sintaxe

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

Compiladores 02 Analise léxica

Compiladores II. Fabio Mascarenhas

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

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

Compiladores - Autômatos

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

Introdução ao reconhecimento de padrões e expressões regulares; Aprendizagem dos conceitos através da realização de alguns exercícios;

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

TUTORIAL MATLAB Victor Breder 2016

Compiladores. Análise Léxica

Introdução à Programação

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

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

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

Análise Sintática Introdução

Linguagem de Programação C. Fluxo de Saída Padrão. Linguagem de Programação C. printf. Fluxo de Saída Padrão. Algoritmos e Lógica de Programação

2. Tipos Abstratos de Dados

Compiladores. Fabio Mascarenhas

Compiladores Aula 3. Celso Olivete Júnior.

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

Estrutura geral de um compilador programa-fonte

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

Compiladores. Análise Léxica

Folha 3 - Análise léxica

Gramáticas Livres de Contexto

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

INTRODUÇÃO À PROGRAMAÇÃO II VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS

Conceitos de Linguagens de Programação

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

Prof. Adriano Maranhão COMPILADORES

Aula Extra. Depurador Code::Blocks. Monitoria de Introdução à Programação

Programação Orientada a Objeto Java

Linguagens de Programação:

Universidade Federal da Paraíba Centro de Informática Departamento de Informática

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

Linguagens e Paradigmas de Programação

IV.2 Aspectos Léxicos Convencionais

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

Linguagens de Programação Aula 3

Introdução a Funções

Montadores e Compiladores

Trabalho de Implementação de Analisador Léxico Parte 1

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

Compiladores. Introdução

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

Função de um Analisador Léxico (Scanner)

Compilação da linguagem Panda

Compiladores Análise Semântica

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

MC Teste de Mesa e Comandos Repetitivos

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

Orientação a Objetos

Algoritmos APRENDENDO A PROGRAMAR COM C#

Admistração de Redes de Computadores (ARC)

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

Algoritmo e Lógica de Programação. Conceitos de Linguagens de Programação

Compiladores Análise Semântica

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

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

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

Capítulo 2 Máquinas de Estado

1. Noção de algoritmo

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

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos

Introdução à Programação de Computadores Parte I

3. Linguagem de Programação C

Linguagem de programação: Pascal

Conceitos básicos de programação

Linguagens de Programação

Compiladores. Conceitos Básicos

Análise Sintática. Fabiano Baldo

Análise Semântica: Verificação de Tipos

T écnicas de Obtenção de Requisitos

INFORMÁTICA PARA GESTÃO II Curso Superior de Gestão de Marketing

Transcrição:

Análise Léxica Renato Ferreira Sumário Definição informal de Análise Léxica Identifica tokens numa string de entrada Alguns detalhes Lookahead Ambiguidade Especificação de Analisadores Léxicos Expressões Regulares Exemplos 1

O que queremos fazer: Análise Léxica Lembrando que internamente: if (i == j) z = 0; else z = 1; \tif (i == j)\n\t\tz = 0;\n\telse\n\t\tz = 1;\n Particionar o string em substrings substrings são tokens Definição de Token Uma categoria sintática Em português: Adjetivo, substantivo, verbo, Em linguagem de programação: Identificador, Literal, Palavra reservada, 2

Tokens Correspondem a conjuntos de strings Identificadores: strings com letras e algarismos, iniciado com letra Literais: inteiros: um string não vazio de algarismos, que pode ser iniciado com algarismo ou + ou float: 6.02E 23 Palavras reservadas: while, if, begin Para que servem os tokens Classificam os substrings de acordo com o papel dele na sentença A saída da análise léxica é uma sequencia de tokens que é a entrada para o analisador sintático O analisador sintático utiliza as distinções Um identificador é tratado diferentemente de uma palavra reservada 3

Projetando um Analisador Léxico: Passo 1 Definir um conjunto finito de tokens Tokens descrevem todos os itens de interesse A escolha dos tokens depende da linguagem e do projeto do analisador sintático Lembrando que: Exemplo \tif (i == j)\n\t\tz = 0;\n\telse\n\t\tz = 1;\n Tokens úteis para a expressão acima seriam: Inteiro, Palavra Reservada (keywork), Identificador ( ) = == ; Espaço em branco (whitespace) 4

Projetando um Analisador Léxico: Passo 2 Descrever as strings que pertencem a cada token Lembrando: Identificador: strings de letras e algarismos começando com letras Inteiro: uma sequência não vazia de algarismos que pode se iniciar com + ou com. Keyword: else, if, begin A implementação A implementação precisa realizar duas tarefas 1. Reconhecer os substrings correspondentes a cada token 2. Retornar o valor ou o lexema do token o lexema é o substring encontrado na entrada 5

Exemplo \tif (i == j)\n\t\tz = 0;\n\telse\n\t\tz = 1;\n if ( id == id ) id = int ; else id = int ; i j z 0 z 1 Descarta caracteres desinteressantes Separadores, comentários Sem função para o analisador sintático É tão fácil assim? Alguns aspectos Não exatamente A história nos mostra 6

Análise Léxica em FORTRAN Em fortran, separadores são não significativos Por exemplo: VAR1 éo mesmo que VA R1 Considere: DO 5 I = 1,25 DO 5 I = 1.25 A motivação é pela imprecisão da tecnologia cartões perfurados Lookahead Objetivo é ler os caracteres da entrada, reconhecendo os tokens na medida que aparecem Frequentemente é preciso ler o próximo caracter pra saber onde um token termina e o próximo começa i versus if = versus == 7

Análise Léxica em PL/I Em PL/I, os comandos da linguagem não são palavras reservadas IF ELSE THEN THEN = ELSE; ELSE ELSE = THEN Declarações DECLARE (ARG1,, ARGN) Não há como saber se o DECLARE éum comando, ou uma variável do tipo array até depois do ). Lookahead arbitrário Mais idiosincrasias históricas ao longo do curso Análise Léxica em C++ Sim, os problemas continuam Sintaxe de templates Foo<Bar> Sintaxe de stream cin >> var; Aninhamento de templates: Foo<Bar<Bazz>> 8

Resumindo O objetivo do analisador léxico é: Particionar o string de entrada emlexemas Identificar o token de cada lexema Leitura direta Esquerda para a direita lookahead pode ser necessário Ainda precisamos de: O que falta? Um mecanismo para descrever os lexemas de cada token Um mecanismo de resolver ambiguidades Estamos falando if ou de duas variáveis i e f? == ou = e = 9

Linguagens Regulares Existem vários formalismos para especificar tokens Linguagens regulares é a mais popular Teoria simples e útil Fácil compreensão Implementação eficiente Definição Linguagens Seja S um conjunto de caracteres. Uma linguagem sobre S éum conjunto de strings formados a partir de S 10

Exemplos Considerando o alfabeto como sendo o alfabeto de português Linguagem: Português Considerando o alfabeto o conjunto ASCII Linguagem: C Nem todas as sequencias de letras formam sentenças em português Perceba que ASCII é diferente do conjunto de letras da lingua portuguesa Notação Linguagens são conjuntos de strings Precisamos de alguma notação para definir os strings do conjunto que queremos A notação padrão para especificar linguagens regulares são expressões regulares 11