Você está na página 1de 22

Compiladores

Análise Léxica - Aula 03 Noiza Waltrick Trindade [noiza@uems.br]

Reconhecimento de Tokens  A forma mais recomendada no aprendizado é o Diagrama de Transições seguido da implementação de uma máquina de estados
– AFN – Autômatos Finitos Não-determinísticos – AFD – Autômatos Finitos Determinísticos

Pág.  2

 3 . denominadas lados  Os lados são rotulados com caracteres que indicam as possíveis entrada que podem aparecer após o diagrama de estado ter atingido um dado estado  O rótulo outro se refere a qualquer caractere de entrada que não seja o indicado pelos demais rótulos que deixam o estado  Um círculo duplo determina um estado de aceitação Pág.Diagrama de Transições  Utilizado para determinar a seqüência de ações executadas pelo analisador léxico no processo de reconhecimento de um token  As posições no diagrama são representadas através de um círculo e são chamadas de estado  Os estados são conectados por setas.

Reconhecimento de Tokens  Diagrama de transições para relop Pág.  4 .

 5 .Esboço da implementação do diagrama de transição de relop Pág.

Máquina de Estados Finita  Uma FSM (Finite State Machine) que reconhece Mr|Ms Pág.  6 .

 7 . S. F) – S = Conjunto finito de estados – S = “Alfabeto” de símbolos de entrada. d. Σ (ex: ASCII) – d = Função de transição – S0 = Estado inicial – F = Estado final ou Estado de aceitação Pág.Autômatos Finitos Não-Determinísticos  Definição: Um AFN é um modelo matemático que consiste em (S. S0.

 8 .Autômatos Finitos Determinísticos  Definição: Um AFD é um tipo especial de AFN – Nenhum estado possui uma transição-ε – Para cada estado s de entrada a existe no máximo um lado rotulado a deixando s Pág.

 9 .Descrição de Símbolos com Gramáticas Regulares <IDENT> → L | L <RESTO> <RESTO> → L | D | L <RESTO> | D <RESTO> <NUMERO> → D | D <NUMERO> <OPER> → = | + | * | ** <PAREN> → ( | ) L = letra. D = dígito Pág.

Descrição de Símbolos com Autômatos Finitos  Outra forma de descrever os símbolos de uma linguagem seria com o uso de autômatos de estados finitos (que têm a vantagem de permitir uma tradução quase direta para código de programação).  Para a gramática do exemplo anterior teríamos os autômatos a seguir. Pág.  Obter algoritmos a partir dos autômatos é uma tarefa bastante simples.  10 .

 11 .Autômatos para reconhecimento de símbolos Pág.

 12 .Reconhecimento de Identificador Pág.

 13 .Reconhecimento de Número Pág.

Reconhecimento  Nas linguagens de programação é comum a existência de identificadores que pertençam à linguagem e têm seu uso reservado para o compilador (facilitando a tarefa de reconhecimento sintático).  14 . portanto.  No procedimento de reconhecimento de identificador. deve ser feita uma consulta à uma tabela de palavras reservadas para verificar se um identificador reconhecido é uma palavra reservada ou não (é um nome definido pelo programador). Pág.

mostrado na figura seguinte.Implementação do Analisador Léxico  Para implementar o analisador léxico mais facilmente. podemos agrupar os autômatos para reconhecimento de identificadores. Pág.  15 . números e operadores em um único autômato que seria o próprio analisador.

Autômato Final do Analisador Léxico Pág.  16 .

– leia_caractere_não_branco(): função que obtém o próximo caractere diferente de branco (espaço. – símbolo: armazena a cadeia de caracteres que compõem o símbolo sendo formado. mudança de página) do programa fonte. Pág. tabulação.  VARIÁVEIS NECESSÁRIAS – caractere: armazena o último caractere lido e que está sendo analisado.  17 . mudança de linha.Implementação  ROTINAS NECESSÁRIAS – leia_caractere(): função que obtém o próximo caractere do programa fonte.

 18 .Codificação dos símbolos Pág.

Algoritmo Pág.  19 .

Algoritmo Pág.  20 .

 21 .Algoritmo Pág.

Algoritmo Pág.  22 .