



Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Compiladores Análise sintática Análise Top-Down
Tipologia: Notas de estudo
1 / 6
Esta página não é visível na pré-visualização
Não perca as partes importantes!




proc First(α: string of symbols)
Repeat {
Para todas as produções α → X 1 X 2 X 3 … Xn do if X 1 ∈T then // caso simples onde X 1 é um terminal First(α) := {X 1 } else { // X 1 é um não-terminal First(α) = First{X 1 } \ {ε}; for (i=1 ; i<=n ; i++) { if ε is in First(X 1 ) and in First(X 2 ) and in… First(Xi-1) First(α) := First(α) ∪ First(Xi) \ {ε} } } if (α =>* ε) then First(α) := First(α) ∪ {ε} end do } until no change in any First(α)
O que acontece se ε ∈ First(A)?
S → ACE
A → a | b | ε
C → c | d | ε
E → e
Consegue derivar?
O que acontece se ε ∈ First(A)?
S → ACE
A → a | b | ε
C → c | d | ε
E → e
Consegue derivar?
switch { case ‘a’: case ‘b’: A(); C(); E(); break; default: abort(“syntax_error”); }
O que acontece se ε ∈ First(A)?
S → ACE
A → a | b | ε
C → c | d | ε
E → e
Consegue derivar?
switch { case ‘a’: case ‘b’: case ‘c’: case ‘d’: C(); E(); break; default: abort(“syntax_error”); }
O que acontece se ε ∈ First(A)?
S → ACE
A → a | b | ε
C → c | d | ε
E → e
Consegue derivar?
switch { case ‘a’: case ‘b’: case ‘c’: case ‘d’: case ‘e’: E(); break; default: abort(“syntax_error”); }
O que acontece se ε ∈ First(A)?
S → ACE
A → a | b | ε
C → c | d | ε
E → e
Consegue derivar?
switch { case ‘a’: MatchToken(‘a’); break; case ‘b’: MatchToken(‘b’); break; case ??: break; default: abort(“syntax_error”); }