análises léxica e sintática

26
Análises léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Mauro La-Salette C. L. de Araújo Centro de Informática – CIn Universidade Federal de Pernambuco – UFPE [email protected]

Upload: della

Post on 09-Jan-2016

62 views

Category:

Documents


2 download

DESCRIPTION

Análises léxica e sintática. Teoria e Implementação de Linguagens Computacionais - IF688 Mauro La-Salette C. L. de Araújo Centro de Informática – CIn Universidade Federal de Pernambuco – UFPE [email protected]. Roteiro. Visão geral Análise léxica Definição Especificação Implementação - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Análises léxica e sintática

Análises léxica e sintática Teoria e Implementação de Linguagens

Computacionais - IF688

Mauro La-Salette C. L. de AraújoCentro de Informática – CIn

Universidade Federal de Pernambuco – UFPE

[email protected]

Page 2: Análises léxica e sintática

Roteiro

Visão geral Análise léxica

Definição Especificação Implementação Correspondência

Análise sintática Definição Especificação Implementação

Algoritmos de parsing e gramáticas Gramáticas ambíguas Sintaxe abstrata

Page 3: Análises léxica e sintática

executável

Visão Geral

Análise sintática

Código fonte

AST

Análise semântica

Geração decódigo

AST decorada

Análiseléxica

Tokens

Page 4: Análises léxica e sintática

Análise Léxica

Page 5: Análises léxica e sintática

Definição

Fase da compilação responsável por extrair os tokens do código fonte de um programa.

if (n == 0) { return 1;} else { ...} RPAR LCUR

RCUR

if LPAR

return

else

"n"id

"0"intLit

assign

"1"intLit ...comm

Page 6: Análises léxica e sintática

Especificação

Os tokens de uma linguagem comumente são especificados através de Expressões Regulares

[a-z][a-z0-9]* identifier

[0-9]+ intLiteral

Page 7: Análises léxica e sintática

Implementação

Autômatos finitos

1 2

a-z a-z

0-9

ID

21 3

i f

IF

Page 8: Análises léxica e sintática

Análise Sintática

Page 9: Análises léxica e sintática

Definição

Fase da compilação responsável por determinar se uma dada cadeia de entrada pertence ou não à linguagem definida por uma gramática

Tem como entrada os tokens processados pela análise léxica

Produz uma estrutura comumente denominada AST – abstract syntax tree

Page 10: Análises léxica e sintática

Especificação

BNF - Backus-Naur form

S, A, B, C, D : não-terminais

a,b,d: terminais

S ::= A | BA ::= C | DB ::= bbaC ::= abD ::= dab

Produções

Page 11: Análises léxica e sintática

Implementação

Algoritmos de parsing e gramáticas

Classificação

Top-down

• Recursive-descent / LL(1)

Bottom-up

• LR, SLR, LALR, LR(k)

Page 12: Análises léxica e sintática

Recursive descent

Algoritmo baseado em previsões

Funções mutuamente recursivas

Uma função para cada não-terminal

Page 13: Análises léxica e sintática

Recursive descent

Desenvolvendo um recursive descent parser

Cada não terminal 'X' dará origem a um método/função parseX();

Produções do tipo 'A | B' darão origem a cláusulas cases

Page 14: Análises léxica e sintática

Recursive descent

A ::= aBcC

B ::= CB | cC

C ::= da

parseA() { accept(‘a’); parseB(); accept(‘c’); parseC();}

parseB() { case (d): parseC(); parseB(); case (c): accept(‘c’); parseC();}

parseC() { accept(‘d’); accept(‘a’); }

Page 15: Análises léxica e sintática

Recursive descent

A ::= aBcC

B ::= CB | CA

C ::= da

parseA() { accept(‘a’); parseB(); accept(‘c’); parseC();}

parseB() { case (d): parseC(); parseB(); case (d): parseC(); parseA();}

parseC() { accept(‘d’); accept(‘a’);}

Page 16: Análises léxica e sintática

Recursive descent

Vantagens Fácil de implementar

Desvantagens Performance Gramática reconhecida possui restrições

Sem recursão à esquerdaDeve estar fatorada ...

Page 17: Análises léxica e sintática

Recursive descent

A ::= aBC

B ::= CB | CA

C ::= da

A ::= aBC

B ::= CX

X ::= B | A

C ::= da

GramáticaLL(1)

Page 18: Análises léxica e sintática

Gramáticas LL(1)

Left-to-right parse Leftmost-derivation 1-symbol-lookahead

Page 19: Análises léxica e sintática

Gramáticas Ambíguas

Uma gramática é ambígua se a partir dela uma sentença pode dar origem a duas arvores de parsing

Problemáticas para a compilação

Eliminação de ambigüidade é quase sempre possível

Transformações na gramática

Page 20: Análises léxica e sintática

Gramáticas Ambíguas

Caso clássico: gramática para expressões aritméticas

E ::= intLiteral | E '*' E | E '/' E | E '+' E | E '-' E |'(' E ')'

Page 21: Análises léxica e sintática

Gramáticas Ambíguas

1 + 2 * 3

E

E E

E E

*

+ 3

21

E

E E

EE

+

*1

2 3

Page 22: Análises léxica e sintática

Gramáticas Ambíguas

Solução: Transformar a gramática

* e / com maior precedência que + ou - Operadores associativos a esquerda

E ::= intLiteral | E '*' E | E '/' E | E '+' E | E '-' E |'(' E ')'

E ::= E '+' T | E '–' T | TT ::= T '*' F | T '/' F | FF ::= intLiteral |'(' E ')'

Page 23: Análises léxica e sintática

Sintaxe abstrata

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 Parse trees nunca são montadas na prática

Page 24: Análises léxica e sintática

AST – Abstract Syntax Tree

Capturam a essência da estrutura de uma gramática abstraindo não-terminais

Representação possível Java: Classes que possam se relacionar a fim de

montar uma árvore

Pode ser produzida através da inserção de ações semânticas no parser

Page 25: Análises léxica e sintática

AST – Abstract Syntax Tree

IfThenElse ::= 'if' expr 'then' comm1 'else' comm2

return new IfThenElse(expr, comm1, comm2);

IfThenElse

expr : Expressioncomm1 : Commandcomm2 : Command

Page 26: Análises léxica e sintática

Análises léxica e sintática Teoria e Implementação de Linguagens

Computacionais - IF688

Mauro La-Salette C. L. de AraújoCentro de Informática – CIn

Universidade Federal de Pernambuco – UFPE

[email protected]