A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza

Apresentações semelhantes


Apresentação em tema: "Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza"— Transcrição da apresentação:

1 Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza

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 Processo de compilação begin if x = 5 then... Código Fonte Compilador Programa output input

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

5 ANÁLISE LÉXICA

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

7 Reconhecendo tokens Expressões regulares if IF [a-z][a-z0-9]* ID [0-9]+ NUM 1 2 a-z 0-9 ID 21 3 if IF

8 ANÁLISE SINTÁTICA

9 Análise Sintática the way in wich words are put together to form phrases, clauses or sentences. 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 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 ) Determinar se uma cadeia pertence à gramática

14 Parse tree A 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 a a+ E E

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

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

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-derivation1-symbol lookahead

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 Syntax Tree (AST) IfThenElse ::= 'if' expr 'then' comm1 'else' comm2 return new IfThenElse(expr, comm1, comm2);

23 Abstract Syntax Tree (AST)

24 Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza


Carregar ppt "Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza"

Apresentações semelhantes


Anúncios Google