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
  • AFND: exemplo
  • AFND: caminhos alternativos
  • AFND: exemplo
  • AFND: exemplo com transições ε
  • AFND: exemplo com transições ε
  • AFND: definição formal
  • AFND: outro exemplo
  • AFND: linguagem reconhecida
  • Tabelas de transição
  1. Análise Lexical

Autómato finito não determinista

PreviousAutómatos finitosNextAutómato finito determinista

Last updated 2 years ago

Um autómato finito não determinista é um autómato finito onde:

  • as transições estão associadas a símbolos individuais do alfabeto ou à palavra vazia (ε);

  • de cada estado saem zero ou mais transições por cada símbolo do alfabeto ou ε;

  • há um estado inicial;

  • há zero ou mais estados de aceitação, que determinam as palavras aceites;

  • uma dada palavra sobre o alfabeto faz o sistema avançar do estado inicial a zero ou mais estados finais, determinando estes a aceitação ou rejeição da palavra.

Os arcos múltiplos permitem alternativas de reconhecimento.

Os arcos ausentes representam quedas num estado de morte (estado não representado, logo implicando palavra não reconhecida).

AFND: exemplo

Um possível diagrama de transição para um AFND que reconhece a expressão regular (a|b)*abb é o seguinte:

É bem evidente o efeito do fecho de Kleene no diagrama, assim como a alternativa (a | b) e as sequências.

AFND: caminhos alternativos

Será que a palavra aabb pertence esta linguagem?

Existem 3 caminhos alternativos no diagrama:

Apenas o último termina no estado final.

Podemos representar estes caminhos com uma estrutura tipo árvore (deitada):

AFND: exemplo

Considerando o alfabeto A = {a;b;c}, que palavras são reconhecidas pelo autómato seguinte:

Como expressão regular: (a|b|c)*a(b|c)

AFND: exemplo com transições ε

Considere o seguinte AFND sobre o alfabeto A = {0;1}:

Há 6 caminhos possíveis:

AFND: exemplo com transições ε

Que palavras são reconhecidas por este autómato?

Todas as palavras terminadas em 11 ou 101.

Como expressão regular: (0|1)*10?1

AFND: definição formal

AFND: outro exemplo

Represente analiticamente o AFND:

Como expressão regular: (0|1)*1(0|ε)1

Ou alternativamente: (0|1)*1(0)?1

AFND: linguagem reconhecida

Tabelas de transição

Podemos representar um AFND por uma tabela de transição, em que as linhas correspondem aos estados, e as colunas aos símbolos de entrada incluindo a palavra vazia (Aε).

A tabela de transição para o AFND:

é a seguinte:

Como conjunto:

Um automato finito não determinista é um quíntuplo , em que: