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

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

Análise léxica e sintática

Apresentações semelhantes


Apresentação em tema: "Análise léxica e sintática"— 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 Análise sintática
Reconhecimento de tokens Análise sintática Gramáticas Representações de um programa

3 Processo de compilação
Compilador begin if x = 5 then ... Código Fonte Programa input output

4 Árvore sintática abstrata
Fases da compilação Código fonte Análise Léxica tokens e lexemas implementação abstração Árvore sintática abstrata Análise Sintática Análise Semântica AST decorada Código Máquina 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 { ... } if LPAR "n" id equals "0" intLit RPAR LCUR return "1" intLit comm RCUR else ...

7 Reconhecendo tokens Expressões regulares if IF [a-z][a-z0-9]* ID
[0-9] NUM 1 2 a-z 0-9 ID 2 1 3 i f 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 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

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

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-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"

Apresentações semelhantes


Anúncios Google