1 / 13

Análise Lexical

Análise Lexical. Compiladores, Aula Nº 7 João M. P. Cardoso. Da Expressão Regular ao Autómato. Tradução da Expressão Regular para um Autómato Implementação do Autómato. Da Expressão Regular ao Autómato. Construção por indução estrutural Dada uma expressão regular r arbitrária,

halen
Download Presentation

Análise Lexical

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Da Expressão Regular ao Autómato • Tradução da Expressão Regular para um Autómato • Implementação do Autómato

  3. 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 • Um estado de aceitação

  4. Construtores Básicos   a a

  5. Sequência • r1.r2    r1 r2

  6. Selecção • r1 | r2  r1   r2 

  7. Asterisco de Kleene • r*    r 

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

  9. 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

  10. 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

  11. 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 0 0   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 0 0 0 0 6,7,2,3,4,8 14,15,10,11,12,16 0 0

  12. 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

  13. 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

More Related