• Nenhum resultado encontrado

Compiladores-08

N/A
N/A
Protected

Academic year: 2021

Share "Compiladores-08"

Copied!
45
0
0

Texto

(1)

Análise Sintática LR (parte 1)

"As minhas ovelhas ouvem a minha voz; eu as conheço, e elas me seguem. Eu lhes

dou a vida eterna e elas jamais perecerão."

(2)

Análise Sintática LR

Também chamados de parsers shift-reduce

É uma técnica de análise sintática bottom-up

(ascendente)

 Usada em vários geradores automáticos de

parsers

(3)

Analisador Sintática LR

Existem diversos tipos de analisadores LR(k)

Left-to-right – a ordem de leitura dos tokens é da

esquerda para a direita

Rigthmost derivation – encontra uma derivação mais

à direita (porém, de trás para a frente)

(4)

Analisador Sintática LR

 O tipo que veremos, inicialmente, é chamado

Parser LR(0)

Veremos o Parser SLR(1) na próxima aula

(5)

Esclarecendo...

Classificação “maior”: parser bottom-up

Sub-classificação: parser LR (shift-reduce)

(6)

Assuntos

1. Princípios de funcionamento

2. Construção do autômato LR(0)

3. Construção das tabelas

(7)

1. Princípios de

Funcionamento

(8)

Funcionamento

 Objetivo: dar uma ideia geral do funcionamento

de todos os parsers shift-reduce

 Símbolos terminais (tokens) lidos de uma

entrada (lexer)

 Símbolos terminais e não-terminais podem ser

(9)

Funcionamento

 À medida que lê os terminais (tokens), o parser

poderá realizar uma destas ações

 SHIFT

 REDUCE

 ACCEPT

(10)

Ações

Ação REDUCE <X>

 Realizada quando os símbolos no topo da pilha

formam a cadeia , e o parser “percebeu” que eles foram gerados por X

 Ação principal

 Na árvore, equivale a tornar X o pai de cada símbolo

da cadeia 

 Executa dois passos:

1. Remove toda a cadeia  da pilha 2. Insere o símbolo X

(11)

Ações

Ação SHIFT

 Pega o próximo terminal (token) da entrada e

“guarda” na pilha

 Realizada quando o parser precisa de mais

informações sobre a entrada antes de formar um “ramo” da árvore

(12)

Ações

Ação ACCEPT

 Indica que a entrada terminou e está correta (toda a

árvore foi identificada/criada)

Ação ERROR

(13)

Funcionamento

 O grande problema é:

O parser LR(0), basicamente, vai escolher com

base no estado atual de um “autômato LR(0)”

 Mas pode ser necessário ver o token para decidir o

próximo estado

(14)

Funcionamento

 Antes de prosseguir, precisamos ver como criar

um Autômato LR(0)

 Veremos, a seguir, como construí-lo a partir de

(15)

2. Construção do Autômato

LR(0)

(16)

Construção do Autômato

O primeiro passo é criar um gramática

estendida

Acrescentar a produção S’ C (ou S’ C$)

C é o não-terminal inicial original e S’ vai ser um novo

não-terminal inicial

$ é tratado como um terminal, e representa fim de

arquivo (EOF)

Esta vai ser a única “produção inicial”, o que facilita disparar o ACCEPT.

(17)

Itens LR(0)

 Indicam em que parte de uma produção a

análise sintática pode estar, num certo instante

 Um ponto é usado para indicar a posição

Para um produção XYZW , temos estes itens

possíveis:

X·YZW

XY·ZW

XYZ·W

(18)

Autômato LR(0)

Um Autômato LR(0) é assim:

 Cada estado é uma coleção de itens LR(0)

 As transições entre estados acontecem quando um

símbolo (terminal ou não-terminal) é “lido”

 Não existe estado final

Ou: você pode entender o estado que tem S’ C$· como

(19)

Autômato LR(0)

O estado inicial será o item S’  ·C

Para todo item X·Y , sendo Y não-terminal,

adicionar ao mesmo estado os itens

Y. , para toda produção de Y

Para todo item X·Y , criar transição que:

Lê o símbolo Y (terminal ou não)

(20)

Autômato LR(0)

 Depois de concluído o autômato, os estados

devem ser numerados, para facilitar

 O autômato pode, então, ser usado para criar as

(21)

Exemplo: A Gramática

E → E+T | T

T → n

(22)
(23)

Mais Sobre a Pilha

 Este autômato será simulado por meio da pilha

A pilha guardará pares “símbolo / estado”

 Cada símbolo (terminal ou não-terminal) inserido na

pilha levará o autômato a um novo estado

O estado atual será o estado no topo da pilha

(24)

3. Construção das Tabelas

de um Parser LR(0)

(25)

Tabelas de Parsing

 Um Parser LR(0) é dirigido por certas tabelas,

construídas a partir do autômato

 Como as tabelas são organizadas? Duas

formas:

 Forma intuitiva

(26)

3.1 Forma Intuitiva

Uma tabela de ações

Para cada estado, indica uma ação

 Ações possíveis: REDUCE ou ACCEPT ou SHIFT

(sem o próximo estado)

 Depois do SHIFT, olharia o token para decidir o próximo

estado

Uma tabela das transições do autômato

Para cada estado e cada símbolo (terminal ou

não-terminal), indica o próximo estado

(27)

3.1 Forma Intuitiva - Exemplo

 (Mostrar tabelas “intuitivas” baseadas no

autômato anterior)

Daria certo assim.

Porém, na prática, as tabelas

são organizadas de forma

(28)

3.2 Forma Padrão

 Nesta forma, cada ação SHIFT já informa o

próximo estado:

SHIFT <próximo estado>

 Assim, a tabela de transição só precisa guardar

(29)

3.2 Forma Padrão

Tabela ACTION

Com base no estado atual e no próximo token, diz

qual ação tomar

Tabela REDUCE-GOTO (ou GOTO)

 Usada durante um “REDUCE <X>” , após

remover todo o  da pilha

Com base no estado e no não-terminal X, diz o

(30)

3.2 Forma Padrão

 Para criar ambas as tabelas, é preciso analisar

os itens LR(0) de cada estado do autômato

 Descreveremos apenas as situações de

entradas corretas

 Nos demais casos, subentende-se que a ação é

(31)

Tabela REDUCE-GOTO

 É a mais simples de construir, descreve

transições do autômato para não-terminais

Se o estado s tiver um item X·N, com um

ponto antes de um não-terminal N, faremos:

REDUCE-GOTO [s, N] = estado contendo o item

XN· (com o ponto depois do N)

(32)

Exemplo:

(33)

Tabela ACTION (caso 1)

Se o estado s tiver um item com um ponto antes

de um terminal t assim: X·t

Seja s’ o estado que temo ponto depois de t assim:

Xt·

Então: ACTION[ s, t ] = “SHIFT <s’>”

Traduzindo: no estado s, quando o token for t, faça uma

(34)

Tabela ACTION (caso 2)

Se o estado s tiver um item com um ponto no

final da produção assim: X·

 Mandar fazer uma redução desta produção,

independente do próximo símbolo:

ACTION[ s, * ] = “REDUCE< X >”

(35)

Mais Sobre o REDUCE

Aplicando uma ação REDUCE< X > :

1. O parser desempilha 

2. Olha o estado atual s (no topo da pilha, após a

remoção de )

3. Consulta a tabela REDUCE-GOTO no estado s com

o símbolo X, para decidir o próximo estado s’,

(36)

Tabela ACTION (caso 3)

 Um caso especial será definido quando o estado

x tiver o item S’ C· (com ponto no final)

 Seria uma redução, porém, esta é a produção inicial

da gramática

Neste caso, a ação será ACCEPT, mas apenas para

o símbolo $ (fim de arquivo): ACTION[ x, $ ] = “ACCEPT”

(37)
(38)

Tabela ACTION (caso 3 alt.)

ALTERNATIVA: Caso você trate S’  C$ como

a produção inicial:

No estado do item S’  C·$ , ao ler $, a ação será

um SHIFT levando ao estado que tem S’  C$.

 Pelo caso 1 normal

Então, no estado S  C$· , basta fazer o ACCEPT

independentemente do próximo símbolo

(39)

Comentários

Observe que, na forma intuitiva, para escolher a

próxima ação (SHIFT, REDUCE ou ACCEPT), não é necessário olhar nenhum token da entrada

 Ou seja, olha 0 de lookahead

Isso explica porque ele é LR(0) e não LR(1)

Porém, na forma padrão, nas ações de SHIFT, é

necessário olhar o próximo token – parser LR(0.5) ?  Ainda assim, é considerado LR(0), porque não precisa olhar o

(40)

4. Exemplos de Execução de

um Parser LR(0)

(41)

Exemplos 1 e 2

 Mostrar como o parser gerado ao longo da aula

processa estas entradas (sequências de tokens vindas do lexer):

“n”

(42)

Exemplo 1: “n”

 Feito em sala...

 Tabela PILHA x ENTRADA x AÇÃO

 Entenda a pilha como uma “lista” em que se

(43)
(44)

Por que LR mesmo ?

 Relembrando: porque o parser faz passos que

lembram uma derivação mais à direita

Porém invertida – bottom-up

 No exemplo 2, observe:

 A cadeia formada por PILHA + ENTRADA,

 Em cada ponto de uma ação REDUCE ou ACCEPT

(45)

Referências

“Compiladores: Princípios, Técnicas e

Ferramentas” (Alfred Aho, et. al.)

 1ª edição: seção 3.7 (até a página 100)  2ª edição: seção 3.6

“Compiladores: Princípios e Práticas” (Kenneth

Louden)

Referências

Documentos relacionados

Nos crimes materiais sempre ocorre o Resultado; nos formais nem sempre há Resultado e nos de mera conduta não existe Resultado. 9) – Qual a teoria adotada pelo código Penal acerca

Em uma hora de Júpiter: Para fazer alguém se apaixonar por você; para fazer alguém tomar a decisão de se casar; para torna-se popular!. Em uma hora de Saturno: Para fazer um

9º, §1º da Lei nº 12.513/2011, as atividades dos servidores ativos nos cursos não poderão prejudicar a carga horária regular de atuação e o atendimento do plano de metas do

Devido a adaptação da metodologia de cálculo de volume de espera para reservatórios sem controle de defluências, atualmente, o sistema SPEC pode ser utilizado

 Não guarde dúvidas, pergunte a sua professora, ela está à disposição (mande mensagem quando precisar). Lembre-se de tirar um tempinho para ler. A pastinha com as

A seleção portuguesa feminina de andebol de sub-20 perdeu hoje 21-20 com a Hungria, na terceira jornada do Grupo C do Mundial da categoria, a decorrer em Koprivnica, na

 Supervisor Responsável pelo Estágio, indicando a qualificação acadêmica do mesmo. 5.4 Todas as atividades a serem desenvolvidas pelo estagiário deverão constar do

INDICADORES AMBIENTAIS ESSENCIAIS: UMA ANÁLISE DA SUA UTILIZAÇÃO NOS RELATÓRIOS DE SUSTENTABILIDADE DAS EMPRESAS DO SETOR DE ENERGIA ELÉTRICA SUL AMERICANO, ELABORADOS