Notes - MIECT
Compiladores
Notes - MIECT
Compiladores
  • Compiladores
  • Compiladores, Linguagens e Gramáticas
    • Enquadramento
    • Compiladores
      • Interpretadores
      • Estrutura de um Compilador
    • Implementação de um Compilador
    • Linguagens: Definição como Conjunto
      • Conceito básicos e terminologia
      • Operações sobre palavras
      • Operações sobre linguagens
    • Introdução às gramáticas
      • Hierarquia de Chomsky
      • Autómatos
  • Introdução, Estrutura, Aplicação
    • Exemplos
      • Expr
      • Exemplo figuras
      • Exemplo visitor
      • Exemplo listener
    • Construção de gramáticas
      • Especificação de gramáticas
    • Estrutura léxica
    • Regras léxicas
      • Padrões léxicos típicos
      • Operador léxico “não ganancioso”
    • Estrutura sintática
      • Secção de Tokens
      • Acções no preâmbulo da gramática
    • Regras sintácticas
      • Padrões sintácticos típicos
      • Precedência
      • Associatividade
      • Herança de gramáticas
    • Outras funcionalidades
      • Tabelas CSV
      • Gramáticas ambíguas
      • Predicados semânticos
      • Separar analisador léxico do analisador sintáctico
      • “Ilhas” lexicais
      • Enviar tokens para canais diferentes
      • Reescrever a entrada
      • Desacoplar código da gramática - ParseTreeProperty
  • Análise Semântica
    • Estrutura de um Compilador
    • Sistema de Tipos
    • Gramáticas de Atributos
    • Tabela de símbolos
    • Instruções restringidas por contexto
    • ANTLR4: gestão de erros
  • Síntese
    • Síntese: Geração de código
    • String Template
    • Síntese: geração de código intermédio
  • Análise Lexical
    • Análise Lexical: Estrutura de um Compilador
    • Linguagens regulares
    • Gramáticas regulares
    • Expressões regulares
    • Conversão entre ER e GR
    • Reconhecimento de tokens
    • Autómatos finitos
    • Autómato finito não determinista
    • Autómato finito determinista
      • Projecto de autómato finito determinista
    • Conversão de AFND em AFD
    • Conversão de uma expressão regular num AFND
    • Autómato finito generalizado (AFG)
  • Gramática de Atributos
    • Conteúdo semântico
    • Gramática de atributos
    • Avaliação Dirigida pela Sintaxe
  • Análise Sintática Descendente
    • Análise Sintática
    • Análise Sintática Descendente
    • Analisador (parser) Recursivo-Descendente Preditivo
    • Questões a resolver
    • Fatorização à Esquerda
    • Eliminação de Recursividade á Esquerda
    • Conjuntos predict, first e follow
      • Conjunto first
      • Conjunto follow
    • Reconhecedor Descendente Preditivo
  • Análise Sintática Ascendente
    • Análise Sintática Ascendente
    • Construção de um reconhecedor ascendente
    • Tabela de decisão de um reconhecedor ascendente
    • Reconhecedor Ascendente
    • Tabela de Decisão de um Reconhecedor Ascendente
Powered by GitBook
On this page
  • AFG reduzido
  • Conversão de uma AFG numa ER
  • Conversão de uma AFG numa ER: Exemplo
  • Eliminar estado com arcos a chegar de outros estados
  • Conversão de uma AFG numa ER: Exemplo 2
  1. Análise Lexical

Autómato finito generalizado (AFG)

PreviousConversão de uma expressão regular num AFNDNextConteúdo semântico

Last updated 2 years ago

Nos autómatos finitos apresentados as transições entre estados apenas decorrem de símbolos do alfabeto ou, no caso dos AFND, da palavra vazia (ε).

No entanto podemos aproximar ainda mais os autómatos finitos das expressões regulares fazendo com que as transições possam decorrer de ER (nas quais os símbolos do alfabeto e a palavra vazia são casos elementares).

Este tipo de autómatos designa-se por Autómato finito generalizado (AFG).

Por exemplo, um AFG sobre o alfabeto A ={a;b;c} para o conjunto de palavras que contém a palavra aba será:

AFG reduzido

Um AFG com a forma

designa-se por autómato finito generalizado reduzido.

Note que:

  • O estado A não é de aceitação e não tem arcos a chegar de outros estados.

  • O estado B é de aceitação e não tem arcos a sair.

Se reduzir um AFG à forma anterior a expressão – e – é uma expressão regular equivalente ao autómato.

Conversão de uma AFG numa ER

Assim transformar uma AFG num AFG reduzido corresponde a determinar a ER que lhe é equivalente.

Algoritmo de conversão:

  1. Transformação de um AFG noutro cujo estado inicial não tenha arcos a chegar.

    1. Se necessário, acrescenta-se um novo estado inicial com um arco em ε para o antigo.

  2. Transformação de um AFG noutro com um único estado de aceitação, sem arcos de saída.

    1. Se necessário, acrescenta-se um novo estado, que passa a ser o único de aceitação, que recebe arcos em ε dos anteriores estados de aceitação, que deixam de o ser.

  3. Eliminação dos restantes estados.

    1. Os estados são eliminados um a um, em processos de transformação que mantêm a equivalência.

Conversão de uma AFG numa ER: Exemplo

Recuperando o AFG atrás apresentado vamos aplicar este algoritmo para o transformar numa ER.

Aplicando a regra 1:

Aplicando a regra 2:

Eliminando o estado A aplicando a regra 3:

Eliminando o estado B aplicando a regra 3:

Eliminar estado com arcos a chegar de outros estados

Se for necessário eliminar um estado que seja destino de arcos de outros estados, é necessário garantir – nesses estados – que o caminho de reconhecimento garantido pelo estado a eliminar não se altera.

Considerando que (e1;e2;e3;e4) são ER, a eliminação de estado A do AFG

resulta no seguinte AFG:

Conversão de uma AFG numa ER: Exemplo 2

Obtenha uma ER equivalente ao AF seguinte:

Regras 1 e 2:

Eliminar o estado A pela regra 4:

Finalmente, eliminar o estado B pela regra 3:

Logo a ER equivalente será: 0*1(0 j 10*1)*