1 / 24

Análise léxica e sintática

Análise léxica e sintática. Teoria e Implementação de Linguagens Computacionais - IF688. Allan J. Souza { ajss }@ cin.ufpe.br. Roteiro. Processo de compilação Análise léxica Reconhecimento de tokens Análise sintática Gramáticas Representações de um programa. begin if x = 5 then .

tevin
Download Presentation

Análise léxica e sintática

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza{ajss}@cin.ufpe.br

  2. Roteiro • Processo de compilação • Análise léxica • Reconhecimento de tokens • Análise sintática • Gramáticas • Representações de um programa

  3. beginifx = 5then... Processo de compilação input output 1100111 0011100011 Programa Código Fonte Compilador

  4. Fases da compilação Código fonte Análise Léxica tokens e lexemas implementação abstração Árvoresintáticaabstrata Análise Sintática Análise Semântica AST decorada CódigoMáquina Geração de Código

  5. Análise Léxica

  6. "n" id intLit intLit "1" "0" Análise Léxica Responsável por traduzir o arquivo fonte em lexemas e tokens. if (n == 0) { return 1; } else { ... } if LPAR equals RPAR LCUR return comm RCUR else ...

  7. IF i f 1 2 a-z a-z ID 2 3 1 0-9 Reconhecendo tokens • Expressões regulares ifIF [a-z][a-z0-9]* ID [0-9]+ NUM

  8. Análise sintática

  9. Análise Sintática “theway in wichwords are puttogether to formphrases, clausesorsentences.” Webster´s Dictionary • A 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.

  10. Gramáticas

  11. 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

  12. Exemplo E → E + E | T T → T * T | F F → ( E ) | a • Simbolo inicial: E • → é utilizado na notação de produção • Terminais: +*( )a • Não terminais: E T F A cadeia a + (a + a * a) pertence à gramática?

  13. Derivações Determinar se uma cadeia pertence à gramática E E + E T + E F + E a + E a + T a + F a + ( 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 )

  14. Parse tree E • A Parse Treeé construída conectando cada derivação a sua origem. • Na prática não é implementada pelos compiladores. E E T T F E F E E T T T F F a + ( a * a ) a +

  15. Gramáticas ambíguas a + a + a E E E E E E T T E E E E T T T T F F F F F F + a a + a a a + a +

  16. Refatoração E → E + E | F F → ( E ) | a E → E + A | F A → E F → ( E ) | a E A E A E E E F F F a + a a +

  17. Gramáticas LL(1) • a cadeia de entrada é examinada da esquerda para a direita • o analisador procura construir uma derivação esquerda • exatamente 1 símbolo do resto da entrada é examinado LL(1) Left-to-right Leftmost-derivation 1-symbollookahead

  18. Recursão à esquerda Gramáticas LL(1) são vulneráveis às entradas duplicadas. Por exemplo, o fragmento a seguir: E → E + T E → 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´→

  19. Fatoração E → F + F | F F → ( E ) | a E → F + F E → F E → F A A → + F | F F → ( E ) | a não é possível decidir, olhando apenas o primeiro símbolo

  20. Representações

  21. Representação do programa • Apenas 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

  22. Abstract SyntaxTree (AST) IfThenElse ::= 'if' expr 'then' comm1 'else' comm2 return new IfThenElse(expr, comm1, comm2);

  23. Abstract SyntaxTree (AST)

  24. Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza{ajss}@cin.ufpe.br

More Related