Conceitos Básicos
Email: cristiano.azevedo@unoesc.edu.br
Visão Geral
Analisadores Sintáticos, juntamente com analisadores
léxicos são componentes fundamentais dos compiladores.
O Sistema permite a criação e manipulação de
representações visuais de gramáticas livres de contexto.
Estas representações, juntamente com definições
adicionais, são convertidas em tabelas.
As tabelas, mais um interpretador genérico, são usadas
para compor um analisador sintático.
Introdução
...
Analisador Sintático
Id1 /
+ 2
Id2 Id3
Os erros podem ser:
tabela de
símbolos
Sequência Aceita ou
de símbolos
Analisador
Rejeita
Árvore de
sintaxe
Existem três estratégias gerais
de análise:
Universal
Podem analisar qualquer gramática livre de contexto
(GLC).
Exemplo: o algoritmo de Coke‐Younger‐Kasami e o
algoritmo de Earley
São 2 tipos
ASD com retrocesso
ASD Preditivo
Recursivo
Não recursivo
Exemplo
if (a - 10 > b * 2)
a = b;
if
> =
- * a b
a 10 b 2
Reconhecimento Ascendente
Entrada: bcbca
Bottom-Up/Direita
S→AB bcbca ⇐ Acbca
A→b ⇐ AcbB
B→cbB ⇐ AB
B→ca ⇐S
Reconhecimento Ascendente
A técnica é chamada de método de precedência dos
operadores
Baseia-se no exame de pares de operadores consecutivos
do programa-fonte, e na tomada de decisões sobre a
operação que deve ser realizada em 1º lugar
Exemplo: A + B * C – D
A multiplicação e a divisão devem ter uma
precedência maior que a soma e a subtração
B * C tem que ser calculada antes da outras 2
operações da expressão
Reconhecimento Ascendente
Analisadores sintáticos ascendentes
Analisadores conhecidos como empilha-reduz (shift-
reduce )
Etapas do reconhecimento: determinar quando reduzir e
determinar a produção a ser utilizada para que a análise
prossiga
Reconhecimento Ascendente
3. E → (E) Ø $
4. E → id
Exercícios 1
3. E → (E) Ø $
4. E → id
Exercícios 2
Processo de reconhecimento:
Gramatica:
1. S → [L] | a
2. L→L;S|S
Reconhecer a cadeia: [a;a]
Reconhecimento Ascendente
Pilha Cadeia Regra
1. S → [L] | a Ø [a;a] $
2. L → L ; S | S
Ø [a;a] $ Empilha [
Ø[ a;a] $ Empilha a
Ø[a ;a] $ Reduz S→a
Ø[S ;a] $ Reduz L→S
Ø[L ;a] $ Empilha ;
Ø[L; a] $ Empilha a
Ø[L;a ]$ Reduz S→a
Ø[L;S ]$ Reduz L→L;S
Ø[L ]$ Empilha ]
Ø[L] $ Reduz S→[L]
ØS $ ACC