Escolar Documentos
Profissional Documentos
Cultura Documentos
Anlise Sinttica
Etapas da Compilao
Anlise Lxica
Anlise Sinttica
Front-End (Anlise)
Back-End (Sntese)
2
Anlise Sinttica
Alguns autores consideram que a anlise sinttica envolve tudo que diz respeito verificao do formato do cdigo fonte
Inclui a anlise lxica como subfase Viso mais coerente, porm o livro texto que usamos tem outra viso...
3
Anlise Sinttica
Entenderemos anlise sinttica como sendo apenas a segunda fase dessa verificao de formato:
a fase que analisa os tokens para descobrir a estrutura gramatical do cdigo fonte Tambm chamada Reconhecimento (Parsing) Porm, um nome melhor seria Anlise Gramatical
4
Gramticas
So usadas para organizar os tokens em frases de sentido lgico Definem regras de formao recursivas
expresso CTE_INT | ID | expresso + expresso
Gramticas
Gramticas
Smbolos terminais:
Smbolos no-terminais:
Gramticas
Smbolo inicial:
No-terminal a partir do qual so derivadas cadeias de smbolos terminais Geralmente um no-terminal chamado programa
Produes:
Notaes
Smbolo no-terminal: letras maiscula Smbolo terminal: letras minsculas, sinais, etc.
E T | T + E T x | i
10
Notaes
Notao BNF
<expressao> ::= <termo> | <termo> "+" <expressao> <termo> ::= "x" | "i"
11
Notaes
12
Notaes
Formal: para mostrar conceitos mais tericos BNF e EBNF: para os exemplos prticos
13
Gramticas
A partir do smbolo inicial, podemos derivar (gerar) as cadeias (palavras) de terminais que so vlidas na linguagem
14
Derivao
Derivao
<expressao> <termo> + <expressao> <termo> + <termo> + <expressao> <termo> + <termo> + <termo> <termo> + <termo> + x <termo> + i + x i + i + x
16
Derivao
O processo de derivao consiste em substituir cada ocorrncia de um no-terminal pelo lado direito (corpo) de alguma de suas produes
Derivao mais esquerda: substituir sempre o no-terminal mais esquerda Derivao mais direita: anlogo
rvore de Derivao
termo
expressao
termo
expressao
i a cadeia gerada pode ser percebida nas folhas, analisandoas da esquerda para a direita
termo
x
18
rvore de Derivao
termo
expressao
termo
expressao
termo
x
19
rvore de Derivao
No diferencia se foi uma derivao mais esquerda ou mais direita que gerou a cadeia
Forma
Tem o smbolo inicial como raiz No-terminais formam ns intermedirios As folhas so os terminais (tokens) da cadeia
20
Gramticas Ambguas
Uma gramtica dita ambgua se ela puder gerar duas rvores de derivao distintas para uma mesma cadeia Veremos uma gramtica equivalente anterior, porm ambgua...
21
Gramticas Ambguas
Exemplo
<expressao> ::= <expressao> "+" <expressao> | "x" | "i"
22
Gramticas Ambguas
Anlise Sinttica
Vimos que gramticas so formalismos que geram cadeias Em compiladores, no vamos gerar uma cadeia, mas j temos a cadeia de terminais (ou seja, de tokens) pronta... Diante disso, qual seria a funo do analisador sinttico?
24
Anlise Sinttica
O objetivo
Descobrir como uma sequncia de tokens pode ser gerada pela gramtica da linguagem
Em outras palavras
Anlise Sinttica
Anlise Sinttica
Usaremos a seguinte gramtica noambgua para ilustrar, a seguir, as duas estratgias de anlise sinttica
<expressao> ::= <termo> | <termo> "+" <expressao> <termo> ::= "x" | "i"
28
Anlise Top-down
Parte da raiz (smbolo inicial) e tenta criar a rvore de cima para baixo Recursivamente testa se a cadeia de tokens (lida da esquerda para a direita) pode ser gerada pelas produes de cada no-terminal O processo de construo da rvore lembra uma derivao mais esquerda da cadeia
29
Anlise Top-down
O parser vai ter que escolher uma produo adequada para o smbolo inicial <expressao>
expressao
x
30
Anlise Top-down
termo
x
31
Anlise Top-down
Ao ler o token i, o parser identifica que gerado por <termo>, mas falta decidir o resto...
expressao ?
termo
x
32
Anlise Top-down
termo
expressao
x
33
Anlise Top-down
termo
expressao
termo
expressao
? i + i + x
34
Anlise Top-down
Porm, no ltimo token, <expresso> vai ter apenas <termo> e o parser encerra no EOF (fim de arquivo)
expressao
termo
expressao
termo
expressao
termo i + i + x
EOF
35
Anlise Bottom-up
Parte das folhas (tokens) e tenta crescer a rvore at a raiz (smbolo inicial) Para isso, compara a sequncia de smbolos o lado direito (ou corpo) das produes para tentar criar um ramo da rvore Diz-se que a sequncia reduzida ao noterminal do lado esquerdo da produo
36
Anlise Bottom-up
Tenta crescer a rvore usando o corpo das produes, at chegar ao smbolo inicial
expressao
x
37
Anlise Bottom-up
termo
x
38
Anlise Bottom-up
termo
x
39
Anlise Bottom-up
expressao
termo
termo
x
40
Anlise Bottom-up
expressao
termo
termo
x
41
Anlise Bottom-up
expressao
termo
termo
termo
x
42
Anlise Bottom-up
Como acabaram-se os tokens, o ltimo <termo> s pode ser gerado diretamente por <expressao>, ento reduz
expressao
expressao
termo
termo
termo
EOF
43
Anlise Bottom-up
expresso
expresso
termo
termo
termo
x
44
Anlise Bottom-up
expressao
expressao
expressao
termo
termo
termo
x
45
Exerccio
46
Resposta
47
Top-down x Bottom-up
A anlise sinttica top-down mais fcil de entender e de implementar, porm a bottomup mais poderosa (aplicvel em mais linguagens) Uso principal das duas estratgias
Bottom-up: usada pelos melhores geradores semi-atomticos de parsers Top-down: melhor tcnica para implementar manualmente
48
Anlise Sinttica
Reportar erros, o que deve ser feito de maneira clara para permitir ao usurio corrigir o problema Recuperar-se de erros automaticamente (pouco uso em compiladores comerciais)
49
Anlise Sinttica
Na verdade, a anlise sinttica no precisa construir a rvore durante o reconhecimento S necessrio construir a rvore se a anlise sinttica for separada das etapas seguintes Em todo caso, o parser vai funcionar como se estivesse descobrindo a rvore que seria gerada pela gramtica para os tokens dados
50
Conceitos
Conceitos
rvore Sinttica
quase igual rvore de derivao, porm organizada de maneira mais racional Cada n interior uma construo da linguagem ou um operador Cada n filho uma parte significativa da construo ou um operando
rvore Sinttica
54
rvore de Derivao
expressao
expressao
expressao
expressao i
expressao i
55
rvore Sinttica
var
soma
var
var
i
56
Sintaxe Abstrata
comum uma linguagem ser especificada por meio de uma gramtica de sintaxe abstrata
Sintaxe Abstrata
Associatividade
Associatividade diz como ser aplicada uma mesma operao binria quando h vrios operandos
Exemplo: como interpretar a + b + c + d + e ? Se o operador for associativo esquerda: ((((a + b) + c) + d) + e) Se o operador for associativo direita: (a + (b + (c + (d + e))))
59
Precedncia
Precedncia diz qual operao binria ser aplicada primeiro houver operadores diferentes
Exemplo: como interpretar a + b * c + d * e ? Se o operador * tiver maior precedncia: ((a + (b * c)) + (d * e)) Se o operador + tiver maior precedncia: (((a + b) * (c + d)) * e)
60
Sintaxe Concreta
Por outro lado, a gramtica tal como ela foi usada para implementar o parser chamada de sintaxe concreta
Especfica da implementao
Cada compilador (de uma mesma linguagem) pode criar uma implementao diferente
61
Sintaxe Concreta
Bibliografia
AHO, A., LAM, M. S., SETHI, R., ULLMAN, J. D., Compiladores: princpios, tcnicas e ferramentas. Ed. Addison Wesley. 2a Edio, 2008 (Captulo 4)
63