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

Documentos relacionados
Compiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador

Como construir um compilador utilizando ferramentas Java

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

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

Programa fonte token padrões lexema Tokens

Hierarquia de Chomsky e sua relação com os autômatos

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

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

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

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

LINGUAGENS FORMAIS E AUTÔMATOS

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

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos

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

INE5317 Linguagens Formais e Compiladores AULA 5: Autômatos Finitos

Editor de Autômatos Finitos. Acadêmica: Josiane Patrícia Morastoni Orientadora: Joyce Martins

Compiladores. Análise Léxica

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

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

Estrutura geral de um compilador programa-fonte

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

Gramáticas Livres de Contexto Parte 1

Linguagens de Programação Aula 4

TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS

Histórico e motivação

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

Análise Léxica. Fundamentos Teóricos. Autômatos Finitos e Conjuntos Regulares (cap. III da apostila de Linguagens Formais e Compiladores)

Introdução à Programação

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.

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

Compiladores - Análise Recursiva

Linguagens Formais e Autômatos P. Blauth Menezes

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

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

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

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Gramáticas Sensíveis ao Contexto (GSC) Linguagens Sensíveis ao Contexto (LSC) Autômatos Linearmente Limitados (ALL)

Compiladores - Análise Léxica

Compiladores - Análise Léxica

Linguagens Formais e Autômatos P. Blauth Menezes

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas

Análise Sintática Introdução

Expressões Regulares. Tiago Alves de Oliveira

1 Expressões Regulares e Linguagens

O que é Linguagem Regular. Um teorema sobre linguagens regulares. Uma aplicação do Lema do Bombeamento. Exemplo de uso do lema do bombeamento

Compiladores - Autômatos

COMPILADORES. Revisão Linguagens formais Parte 01. Geovane Griesang

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Análise Sintática. Fabiano Baldo

Prof. Adriano Maranhão COMPILADORES

Compiladores 02 Analise léxica

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

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

Tokens, Padroes e Lexemas

Python e sua sintaxe LNCC UFRJ

Folha 2 Autómatos e respectivas linguagens

IV.2 Aspectos Léxicos Convencionais

Compiladores Aula 3. Celso Olivete Júnior.

Gramáticas Livres de Contexto

Compiladores Aula 4. Celso Olivete Júnior.

Linguagens de Programação Aula 5

Linguagens Regulares. Prof. Daniel Oliveira

Máquinas de Turing - Computabilidade

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

Alfabeto, Cadeias, Operações e Linguagens

a * Expressões Regulares (ER) Conversão de AF para ER no JFLAP Equivalências entre AFD, AFND, AF-, ER, GR

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

Expressões Regulares. Linguagens Formais e Autômatos. Andrei Rimsa Álvares

Compiladores I Prof. Ricardo Santos (cap 1)

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

IV Gramáticas Livres de Contexto

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

Linguagens Livres de Contexto

I.2 Introdução a Teoria da Computação

BCC242. Auômato Finito Determinístico

a n Sistemas de Estados Finitos AF Determinísticos

SCC Capítulo 1 Linguagens Regulares e Autômatos Finitos

LINGUAGENS FORMAIS E AUTÔMATOS. Prova 2-10/06/ Prof. Marcus Ramos

Apostila 01 Fundamentação da Teoria da Computação e Linguagens Formais

Compiladores - Análise Ascendente

AFNs, Operações Regulares e Expressões Regulares

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

LINGUAGENS FORMAIS Modelos Determinísticos e Não Determinísticos. Usam-se modelos matemáticos para representar eventos (fenômenos) do mundo real.

Compiladores - Análise Ascendente

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

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

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

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

Universidade Federal de Alfenas

Curso: Ciência da Computação Turma: 6ª Série. Teoria da Computação. Aula 4. Autômatos Finitos

Linguagens Formais e Autômatos P. Blauth Menezes

Autômatos com Pilha: Reconhecedores de LLCs

Expressões Regulares e Gramáticas Regulares

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

LFA Aula 07. Equivalência entre AFD e AFND. Equivalência entre ER s e AF s Equivalência entre GR s e AF s. Linguagens Formais e Autômatos

Introdução Definição Conceitos Básicos de Linguagem

Autômatos e Linguagens

Transcrição:

Estrutura de um compilador programa fonte Compiladores Análise lexical () Expressões Regulares analisador léxico analisador sintático analisador semântico análise gerador de código intermediário otimizador de código gerador de código objeto síntese programa objeto Plano da aula. Motivação do uso de Expressões Regulares e definições Linguagens, tokens, lexemas... 2. Regras de formação e exemplos de E.R. Operações Exemplo de uso no Linux: grep. 3. Autômatos Finitos e E.R. Definição e exemplos. Construção de um autômato reconhecedor de E.R. Análise lexical identica as principais seqüências de caracteres que ituem unidades léxicas (tokens) começa a rução da tabela de símbolos retorna mensagens no caso de erro Programa fonte Analisador léxico (scanner) token get token Tabela de Símbolos (identicadores e antes) Analisador sintático (parser) Motivação para análise lexical Projeto simples: separação da análise léxica da sintática faz com que seja possível simplicar cada etapa Eficiência: em separado, o analisador léxico pode ser mais eficiente Portabilidade: restrições referentes ao dispositivo podem ser encapsuladas dentro do analisador léxico Vocabulário básico Lexema: Conjunto de caracteres no programa fonte Tokens: Palavras-chaves, operadores, identicadores, antes, literais, cadeias e símbolos Símbolos terminais na gramática Remete ao analizador sintático! Padrão: Regra que descreve o conjunto de lexemas que podem representar um token

Exemplos: Tokens, Padrões, Lexemas TOKEN relation id num literal LEXEMAS <,<=,=,<>,>, >= pi, contador, D2 3.46,, 6.E23 compiladores PADRÃO < ou <= ou = ou <> ou... letra seguida por letras ou dígitos ante numérica caracteres entre aspas Como definir padrões? Enumerar os valores possíveis: <,<=,=,<>,>, >= Usar conceitos de linguagens formais 4 categorias de linguagens (classicação de Chomsky): linguagens regulares - tipo 3 Autômato de estados finitos linguagens livres de contexto 2 Autômato com pilha linguagens sensíveis ao contexto - tipo Máquina de Turing com fita limitada recursivamente enumeráveis - tipo Máquina de Turing No contexto de LP, as linguagens são representadas por gramáticas ou por autômatos que as reconhecem. Linguagens Formais Símbolo: entidade abstrata. Ex: letras, dígitos, caracteres especiais, etc. Alfabeto (Σ): Um conjunto finito de símbolos. Ex: Σ = {, } String (cadeia, frase): Uma seqüência finita de símbolos de um determinado alfabeto String vazio ( ): string com símbolos Linguagem Formal (Σ*): Conjunto de todos os possíveis strings de um alfabeto Expressão Regular (ER) A definição de E.R. é recursiva: Uma ER básica é definida por literais ER complexas são definidas pela combinação de ER básicas. Regras para formação de palavras válidas Concatenação: xy (x seguido de y) Alternação: x y (x ou y) Repetição(): x* (x repetido ou mais vezes) Repetição(): x+ (x repetido ou mais vezes) Precedências em Expressões Regulares Operador unário *, + Concatenação Operador Usa-se parênteses em casos ambíguos. Exemplo: (a) ((b)*(c)) é equivalente a a b*c a(b c)d é derente de ab cd Exemplos de E. R. : representa o conjunto {} ( ): representa o conjunto {,} ( )( ): representa o conjunto {,,,} *: {,,,,,,...} ( )*: representa todos os strings de s e s ( )* ( )*: representa todos os strings de s e s com pelo menos dois s consecutivos Todos os strings de s e s começando por e não tendo dois s. consecutivos? 2

Propriedades Algébricas Definições regulares r s r (s t) (rs)t r(s t) (s t)r r r r* r** s r (r s) t r(st) rs rt st sr r r (r )* r* comutativa associativa concatenação associativa concatenação distributiva concatenação distributiva é identidade da concatenação é identidade da concatenação relação entre * e * é idempotente Associar nomes a expressões regulares Seja Σ um alfabeto de símbolos básicos Definição regular d r d2 r2.. dn rn d i são nomes distintos r i expressão sobre os símbolos Σ U {d, d2,..., dn} Exemplo: o token num Representação de números sem sinal : 528, 39.37, 6.336E4,.894E-4 num digitos fracao_opc expoente_opc digito... 9 digitos digito digito* fracao_opc.digitos expoente_opc (E (+ - ) digitos) Outras notações e simplicações E+ é equivalente a EE* E é presente pelo menos uma vez. E? é equivalente a E E é presente zero ou uma vez. [xy] é equivalente a x y Sintaxe de sed/grep [a-z] é equivalente a a b c... z [-9] [A-Z] [^a-l] : negação de [a-l] ^... $ delimitam uma linha. Obs: estamos introduzindo uma noção de contexto! Exercícios Descrever as linguagens seguintes: (a )(b ba)* **** Expressões Regulares comuns em compiladores Como se reconhece uma palavra da linguagem seguinte? then then else else relop < <= = <> > \ >= idf letra (letra digito)* num digito + (.digito + )?(E(+ -)?digito + )? space ( \n \t)+ Problema seguinte: reconhecer se um lexema está de acordo com uma E. R.: Será que tmp_ é um idf? 3

Definição de Autômato Finito Autômato finito M sobre um alfabeto Σ é uma 5- upla (K, Σ, δ, e, F), onde: K é o conjunto finito de estados Σ é o alfabeto dos símbolos da linguagem δ : K x Σ K é a função de transição de estados e é o estado inicial F é o conjunto de estados finais δ é uma função parcial, pois não precisa estar definida para todos os pares K x Σ Interesse: há equivalência entre AEF e ER Exemplo de autômato finito M = (K, Σ, δ, e, F) δ(e, d) = e Σ = (d,.) δ(e, d) = e K = (e, e, e 2, e 3 ) δ(e,.) = e 2 F = (e, e 3 ) δ(e 2, d) = e 3 δ(e 3, d) = e 3 d. e e e e e 2 e 2 e 3 e 3 e 3 Autômato que reconhece números inteiros e reais Inicial Final Exemplo de autômato finito Estado Atual q q q q Qual expressão regular corresponde a este autômato? q q, Dois tipos de autômatos: AFD e AFND Um Autômato Finito Não-Determinístico (AFND) Tem um conjunto de estados S Uma entrada definida como um string s de um alfabeto Σ Uma função de transição (S, Σ) -> S+ Um estado de partida Um conjunto de estados finais (de aceitação) Um Autômato Finito Determinístico É um AFND Não tem Є-transição No máximo uma transição saindo de um estado com rótulo um dado símbolo. Da ER ao Autômato (AFND) Construção de Thompson Cada ER básica se traduz em AFND Pode-se agregar os AFND conforme se agregam as ERs. Segue as regras de definição de uma ER: ERs básicas Alternativa, repetição, concatenação... Cada AFND tem exatamente um estado de partida e um estado final. Reconhecedores básicos AFND para reconhecer Є AFND para reconhecer um símbolo x Є x 4

Reconhecedor de alternativa AFND que reconhece a alternativa (r r2) Reconhecedor de concatenação A partir de dois AFNDs que reconhecem r e r2, pode-se reconhecer rr2 assim: r r2 r r2 AFND reconhecedor de r* Exemplo: A partir do AFND que reconhece r, podese criar um AFND que reconhece r* Construir um AFND que reconheça (a b)*abb r Do AFND ao AFD Problema: as Є-transições e as transições múltiplas atrapalham! Não há como determinar, simplesmente, a partir de um símbolo de entrada, qual estado atingir. É muito mais eficiente trabalhar com AFDs para reconhecer uma linguagem. Por outro lado, é mais complicado obter o AF a partir da ER! Solução: transformar automaticamente um AFND em AFD!... Será o assunto da próxima aula!... E terá mais: o FLEX. Referências Livro do Dragão, cap. 3 Tokens e uso de ERs: 3.3 Autômatos: 3.6 Construção de Thompson: 3.7 Série Didática: Compiladores: Cap. 2 Linguagens Formais (Blauth): Cap. 3 5