Vous êtes sur la page 1sur 18

ANLISE SINTTICA

ASD PREDITIVA RECURSIVA


(CONT.)
Compiladores
Departamento de Computao
UEPB

Fabiano de Miranda Silva


ANLISE SINTTICA

Parser

2
ASD PREDITIVA RECURSIVA

Assumindo que a gramtica seja LL(1)


No deve haver recurses esquerda
Fatorao adequada das produes
Conjuntos primeiro de todos os no-terminais devem
ser disjuntos

Grafo sinttico: reconhecedor da linguagem


Imprescindvel para implementao dos
procedimentos do parser

3
ASD PREDITIVA RECURSIVA

Mtodo para gerar os procedimentos


Regras de transformao: mapeamento das regras de
produo (na gramtica) em grafos sintticos
Regras de traduo: mapeamento dos grafos em
procedimentos

4
ASD PREDITIVA RECURSIVA

Regras de transformao e mapeamento


Mapeando um no terminal: S -> X

S X

5
ASD PREDITIVA RECURSIVA

Regras de transformao e mapeamento


Mapeando uma sequncia de no-terminais:
S -> X Y

S X Y

6
ASD PREDITIVA RECURSIVA

Regras de transformao e mapeamento


Mapeando alternativas entre no-terminais:
S -> X | Y

Como
implementar
S X este caso?

Y
7
ASD PREDITIVA RECURSIVA

Se HOUVER recurso esquerda?

8
ASD PREDITIVA RECURSIVA

Eliminao da Recurso esquerda

A -> A |

A -> A
A -> A |
A -> A |

9
ASD PREDITIVA RECURSIVA

Eliminar as recurses esquerda da gramtica:

(1)
S Aa | b
A Ac | Sd |
alternativa: A Ac | Aad | bd |

(2)
Expressao Expressao + Expressao | Int | Boolean
10
ASD PREDITIVA RECURSIVA

Fatorao esquerda
cmd -> if (expr) cmd else cmd
| if (expr) cmd | a
expr -> b

A A |
A 1 |2 | .. | n |
A 1 |2 | .. | n

11
ASD PREDITIVA RECURSIVA

Transforme a gramtica abaixo em LL(1)

S -> iA
A -> E
E -> T + E | T
T -> F * T | F
F -> P F | P
P -> i | (E)

12
ASD PREDITIVA RECURSIVA

Transforme a gramtica abaixo em LL(1)

E -> T + E | T
T -> a | b

13
VERIFICAO DE GRAMTICAS
LL(1) POR MEIO TABELAS DE
14
ANLISE
PARSE TABLE

Tabela utilizada para verificao se a gramtica


satisfaz s condies de uma gramtica LL(1)

Linhas: No Terminais

Colunas: Terminais

Se o terminal da coluna faz parte do conjunto


primeiro, colocar regra naquela coluna, com linha
correspondente ao no-terminal analisado.

Se VAZIO est no conjunto primeiro, colocar regra


tambm nas colunas dos terminais seguinte ao no-
terminal analisado. 15
PARSE TABLE

Exemplo: construir a tabela de parse para a


gramtica abaixo:

FIRST FOLLOW
E T E
S {(, id} {$}
E + T E |
E {( , id} { ) , $}
T F T E {+, } { ) , $}
T * F T | T {( , id} {+ , ) , $}
F ( E ) | id T {*, } {+, ) , $}
F {( , id} {+ , * , ) , $}

16
PARSE TABLE

Tabela correspondente:

id + * ( ) $

E E T E E T E

E E + T E E E

T T F T T F T

T T T * F T T T

F F id F (E)

17
PARSE TABLE

A gramtica s ser LL(1) se e somente se houver


no mximo uma produo para cada entrada da
tabela ou uma sinalizao de erro

18

Vous aimerez peut-être aussi