Download - Análise léxica e sintática
![Page 1: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/1.jpg)
Análise léxica e sintáticaTeoria e Implementação de Linguagens Computacionais - IF688
Allan J. Souza{ajss}@cin.ufpe.br
![Page 2: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/2.jpg)
RoteiroProcesso de compilaçãoAnálise léxica
◦Reconhecimento de tokensAnálise sintáticaGramáticasRepresentações de um programa
![Page 3: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/3.jpg)
Processo de compilação
beginif x = 5 then...
Código Fonte Compilador
1100111 0011100011
Programa
outputinput
![Page 4: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/4.jpg)
Fases da compilaçãoab
stra
ção
implem
entação
Código fonte
tokens e lexemas
Árvoresintáticaabstrata
CódigoMáquina
AST decorada
Análise Léxica
Análise SintáticaAnálise Semântica
Geração de Código
![Page 5: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/5.jpg)
ANÁLISE LÉXICA
![Page 6: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/6.jpg)
Análise LéxicaResponsável por traduzir o arquivo
fonteem lexemas e tokens.
if (n == 0) { return 1;} else { ...} RPAR LCUR
RCUR
if LPAR
return
else
"n"id
"0"intLit
equals
"1"intLit ...comm
![Page 7: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/7.jpg)
Reconhecendo tokens Expressões regulares
if IF [a-z][a-z0-9]* ID[0-9]+ NUM
1 2
a-z a-z
0-9
ID
21 3
i fIF
![Page 8: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/8.jpg)
ANÁLISE SINTÁTICA
![Page 9: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/9.jpg)
Análise Sintática “the way in wich words are put
together to form phrases, clauses or sentences.”
Webster´s DictionaryA seguinte construção é válida?int y = 0,k = 0;int x = y+++k;
Responsável por verificar quando uma sentença faz parte da gramática da linguagem.
![Page 10: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/10.jpg)
GRAMÁTICAS
![Page 11: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/11.jpg)
Descrevendo linguagens Gramáticas livres de contexto
são utilizadas para descrever linguagens de programação◦Símbolo inicial◦Produções◦Símbolos terminais◦Símbolos não-terminais
![Page 12: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/12.jpg)
ExemploE → E + E | TT → T * T | FF → ( E ) | a
Simbolo inicial: E→ é utilizado na
notação de produção
Terminais: + * ( ) a
Não terminais: E T FA cadeia a + (a + a * a) pertence à
gramática?
![Page 13: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/13.jpg)
Derivações
EE + ET + EF + Ea + Ea + Ta + Fa + ( E )a + ( E + E )
a + ( T + E )a + ( F + E )a + ( a + E )a + ( a + T )a + ( a + T * T )a + ( a + F * T )a + ( a + a * T )a + ( a + a * F )a + ( a + a * a )
Determinar se uma cadeia pertence à gramática
![Page 14: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/14.jpg)
Parse treeA Parse Tree é
construída conectando cada derivação a sua origem.
Na prática não é implementada pelos compiladores.
E
E
+
E
T
F
a
T
F
(
E
)
T
*
T
T
F
a
F
aa +
EE
![Page 15: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/15.jpg)
Gramáticas ambíguasa + a + a
E
E
+
E
T
F
a a a+
E E
T
F
T
F
E
a a+
E E
T
F
T
F
E
T
F
a+
E
![Page 16: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/16.jpg)
RefatoraçãoE → E + E | FF → ( E ) | a
E → E + A | FA → EF → ( E ) | a
E
a a+
E A
F
E
F
A
F
a+
E
E
![Page 17: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/17.jpg)
Gramáticas LL(1)a cadeia de entrada é examinada da esquerda para
a direitao analisador procura construir uma derivação
esquerdaexatamente 1 símbolo do resto da entrada é
examinado
LL(1)
Left-to-right
Leftmost-derivation
1-symbol lookahead
![Page 18: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/18.jpg)
Recursão à esquerdaGramáticas LL(1) são vulneráveis às entradas duplicadas.
Por exemplo, o fragmento a seguir:
E → E + TE → T
O fato de E aparecer no início do lado direito da produção é a causa do problema. Isso é conhecido como Recursão à Esquerda. Para corrigir isso, vamos refatorar a gramática, com Recursão à Direita:
E → T E´E´ → +T E´ E´ →
![Page 19: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/19.jpg)
FatoraçãoE → F + F | FF → ( E ) | a
E → F + FE → F
E → F AA → + F | FF → ( E ) | a
não é possível decidir, olhando apenas o primeiro símbolo
![Page 20: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/20.jpg)
REPRESENTAÇÕES
![Page 21: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/21.jpg)
Representação do programaApenas reconhecer se uma sentença
pertence ou não a linguagem especificada por uma gramática não é o suficiente
É necessário produzir uma estrutura que sirva de base para a próxima fase do processo de compilação
![Page 22: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/22.jpg)
Abstract Syntax Tree (AST)
IfThenElseexpr : Expressioncomm1 : Commandcomm2 : Command
IfThenElse ::= 'if' expr 'then' comm1 'else' comm2
return new IfThenElse(expr, comm1, comm2);
![Page 23: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/23.jpg)
Abstract Syntax Tree (AST)
![Page 24: Análise léxica e sintática](https://reader036.vdocuments.com.br/reader036/viewer/2022081419/56816600550346895dd9302d/html5/thumbnails/24.jpg)
Análise léxica e sintáticaTeoria e Implementação de Linguagens Computacionais - IF688
Allan J. Souza{ajss}@cin.ufpe.br