Compiladores, Aula Nº 7 João M. P. Cardoso

Slides:



Advertisements
Apresentações semelhantes
FAPE - Curso de Ciência da Computação
Advertisements

Software Básico Silvio Fernandes
Tópicos em Compiladores
Compiladores Claudio Benossi
II – Análise léxica DEI Papel do analisador léxico.
II – Análise léxica DEI Conversão de expressões regulares em autómatos finitos determinísticos mínimos Bibliografia aconselhada: Aho, Sethi e Ullman –
III – Análise sintáctica
II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:
I - Noções dum compilador
I - Noções dum compilador Partes dum compilador Ferramentas de construção de compiladores Bibliografia aconselhada: –Aho, Sethi e Ullman – Cap. 1 LFA 1999/2000.
I - Noções dum compilador
Paradigmas de Linguagens Conceitos Básicos
Análise Léxica (Parte 2)
1 Introdução (Informal) à Programação DI/FCT/UNL 1º Semestre 2004/2005.
Software Básico Silvio Fernandes
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Linguagens Livres de Contexto
autômatos finitos com transições e
Linguagem C Estruturas de Controle de Fluxos
Disciplina: AAM Profa. Ana Watanabe vol.3
Linguagem de Prog. e Programas
Autômatos Finitos Determinísticos
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Prof. Msc. Raul Paradeda Aula 3 Fundamentos
Programação Baseada em Objectos Desenho de TAD
Aula 13 Tipos Abstractos de Dados IV. 2003/2004 Introdução à Programação 2 Estrutura global do programa (I) Construtores Inspectores.
Programação Orientada para Objectos
Revisão da Linguagem C.
Conceitos Básicos.
Prof. Bruno Moreno Aula 4 – 11/03/2011
Análise Semântica e Representação Intermédia
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
IAED Tagus, 2009/2010 Introdução à Programação em C (I)
Conversão de um NFA para um DFA com um exemplo
Compiladores, Aula Nº 5 João M. P. Cardoso
Compiladores, Aula Nº 11 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Compiladores, Aula Nº 10 João M. P. Cardoso
Ling. Formais e Autômatos AFN-ε
Expressões e Instrução de Atribuição
CAPÍTULO 2 - CONJUNTOS.
Campus de Caraguatatuba Aula 8: Noções Básicas sobre Erros (2)
Prof. Celso Cardoso Neto. (2) ALINHAMENTO Caso 1.
Autómatos de Pilha. UM NOVO MODELO PARA OS AUTÓMATOS FINITOS As linguagens regulares são aceites por autómatos finitos. E as linguagens não regulares?
Organização e Arquitetura de Computadores
1.
O que é uma folha de cálculo?
Capítulo II Gramáticas e Linguagens
Aula 14 1 Análise Sintáctica Compiladores, Aula Nº 14 João M. P. Cardoso.
Programação e Sistemas de Informação
Máquina de Turing Universal
Analise sintática aula-07-analise-sintática.pdf.
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
Minimização de DFAs.
Expressões: operadores aritméticos
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Aula 18 1 Análise Sintáctica Compiladores, Aula Nº 18 João M. P. Cardoso.
Estado Final Único para NFAs e DFAs
Computabilidade e Linguagens Formais
Computabilidade e Linguagens Formais
Computabilidade e Linguagens Formais
Sintaxe de uma Linguagem
Aula 6 1 Análise Lexical Compiladores, Aula Nº 6 João M. P. Cardoso.
Tipos de Dados, Variáveis, Expressões Lógicas e Aritméticas
Reverso de uma Linguagem Regular
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
COMPILADORES 03 Prof. Marcos.
Transcrição da apresentação:

Compiladores, Aula Nº 7 João M. P. Cardoso Análise Lexical Compiladores, Aula Nº 7 João M. P. Cardoso Aula 7

Da Expressão Regular ao Autómato Tradução da Expressão Regular para um Autómato Implementação do Autómato Aula 7

Da Expressão Regular ao Autómato Construção por indução estrutural Dada uma expressão regular r arbitrária, Assumir que podemos convertê-la para um autómato com Um estado início Um estado de aceitação Mostrar como converter todas as construções de expressões regulares para produzir um autómato com Um estado de início Aula 7

Construtores Básicos   a a Aula 7

Sequência r1.r2    r1 r2 Aula 7

Selecção r1 | r2  r1   r2  Aula 7

Asterisco de Kleene r*    r  Aula 7

Regras de Conversão r1 r2  r1.r2  r1 r2 r1 | r2 a a r  r*  Aula 7

Conversão A conversão de uma expressão regular para um autómato baseada nas regras apresentadas produz um NFA Nós queremos ter um DFA para facilitar o algoritmo de reconhecimento Pode-se converter do NFA para o DFA o DFA pode ser exponencialmente maior do que o NFA Teoricamente um NFA com N estados pode originar um DFA com 2N-1 estados A optimização do DFA resultante envolveria eliminação de estados equivalentes Aula 7

Conversão NFA para DFA O DFA tem um estado para cada subconjunto de estados no NFA O estado início do DFA corresponde ao conjunto de estados alcançáveis seguindo as transições  do estado início no NFA Um estado do DFA é de aceitação se um estado de aceitação do NFA está no conjunto de estados agrupados Para determinar a transição despoletada pelo símbolo “a” de um dado estado D do DFA Colocar S como conjunto vazio Encontrar o conjunto N de estados D no NFA Para todos os estados do NFA em N Determinar o conjunto de estados N’ em que o NFA pode estar depois de reconhecer “a” Actualizar S com a união de S com N’ Se S não é vazio, há uma transição para “a” de D para o estado no DFA que tem o conjunto de estados S do NFA Caso contrário, não há nenhuma transição “a” de D Aula 7

. NFA para DFA                 Exemplo: (0 | 1)*.(0|1)*   . 1 1     3 5 11 13     1 2 7 8 9 10 15 16     4 6 12 14   1 1 5,7,2,3,4,8 13,15,10,11,12,16 1 1 1 1 1,2,3,4,8 9,10,11,12,16 6,7,2,3,4,8 14,15,10,11,12,16 Aula 7

Estrutura Lexical nas Linguagens Cada linguagem tem várias categorias de palavras. Numa linguagem de programação: Palavras chave (if, while) Operações aritméticas (+, -, *, /) Números inteiros (1, 2, 45, 67) Números em vírgula flutuante (1.0, .2, 3.337) Identificadores (abc, i, j, ab345) Tipicamente tem-se uma categoria lexical para cada palavra chave e/ou categoria Cada categoria lexical é definida por expressões regulares Aula 7

Exemplo de Categorias Lexicais (exemplo) Palavra_chave_if = if Palavra_chave_while = while Operador = +|-|*|/ Inteiro = [0-9] [0-9]* Float = [0-9]*. [0-9]* Identificador = [a-z]([a-z]|[0-9])* Na análise sintáctica vamos utilizar estas categorias Aula 7