Constru - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

Constru

Description:

Constru o de Compiladores An lise Sint tica – PowerPoint PPT presentation

Number of Views:104
Avg rating:3.0/5.0
Slides: 36
Provided by: Kiko64
Category:
Tags: constru | regular

less

Transcript and Presenter's Notes

Title: Constru


1
Construção de Compiladores
  • Análise Sintática

2
Análise Sintática
  • Tem a função de combinar a lista de tokens
  • Criação de uma estrutura chamada Árvore Sintática
  • A analise sintática também deve rejeitar tokens
    inválidos
  • Reportar erros sintáticos

3
Análise Sintática
  • A análise sintática é mais complexa em natureza
    do que a análise léxica
  • Precisamos de uma linguagem mais avançada
  • Hierarquia de Chomsky

4
Análise Sintática
  • Tente representar as seguintes linguagens com uma
    gramática regular
  • L1 anbn n ? 0
  • L2 anbman n ? 0, m ? 1
  • Relembrando as regras da gramática regular
  • A ? wB
  • A ? w
  • A ? ?

5
Análise Sintática
  • Exemplo mais concreto
  • Expressões aritméticas
  • Num-x/num
  • Como representar casamento de parênteses?
  • Não é possível contar o número de parênteses não
    casados ou abertos
  • Como estabelecer precedências?
  • O string é tratado como uma expressão plana, não
    tendo estrutura

Modifique de forma a suportar ( e )
6
Análise Sintática
  • Linguagens Livre de Contexto
  • Constituem um conjunto de linguagens que podem
    ser geradas por gramáticas livre de contextos
    (GLC), reconhecidas por autômatos de pilha

7
Análise Sintática
  • Autômato de Pilha
  • É uma 7-tupla lt ?, Q, ?, ?, q0, I, Fgt, onde
  • ?, alfabeto de símbolos de entrada
  • Q, conjunto finito de estados possíveis do
    autômato
  • ?, alfabeto da pilha
  • ?, função de transição ? Q x (? ? ?) x ? ? Q x
    ?
  • q0, estado inicial tal que q0 ? Q
  • I, símbolo inicial da pilha
  • F, conjunto de estados finais, tais que F ? Q

8
Análise Sintática
  • Autômato de Pilha (exemplo)
  • Seja A lt ?, Q, ?, ?, q0, I, Fgt

S a, b Q 0, 1, 2 G X, A
q0 0 IX F 2 A
função d0,1,2a,b,eX,A ?
P(0,1,2X,A) é dada por d(0, a, X) ? (0,
AX) d(1, b, A) ? (1, e) d(0, a, A) ? (0,
AA) d(1, e, X) ? (2, X) d(0, b, A) ? (1, e)
Empilhou A
Desempilhou A
Empilhou A
Não fez nada
Desempilhou A
9
Análise Sintática
  • Autômato de Pilha (exemplo)
  • Detalhes da notação
  • Símbolo e no resultado da função indica um pop
  • d(1, b, A) (1, e)
  • Nas operações de push, sempre é representado o
    antigo topo da pilha no resultado
  • d(0, a, X) (0, AX)
  • Operações de push podem empilhar mais do que um
    elemento
  • d(0, a, X) (0, XXAX)

A
X
X
A
A
X
X
Antigo topo da pilha
X
X
A
X
X
10
Análise Sintática
  • Gramáticas livre de contexto
  • Quádrupla G (N, T, P, S), onde
  • N, conjunto finito de símbolos não-terminais
  • T, conjunto finito de símbolos terminais
  • P, conjunto finito de regras gramaticais na forma
    ? ? ?
  • S, símbolo inicial da gramática pertencente a N
  • Regras gramaticais (P) na forma
  • ? ? N
  • ? ? (N ?T)

11
Análise Sintática
  • Gramáticas livre de contexto (exemplos)
  • A linguagem L1 anbn n ? 0 é gerada por
    qual gramática?
  • A linguagem L2 anbman n ? 0, m ? 1 é gerada
    por qual gramática?

12
Análise Sintática
  • E o balanceamento de parênteses e a precedência
    de operadores?

Exp ? Exp Exp Exp ? Exp - Exp Exp ? Exp
Exp Exp ? Exp / Exp Exp ? numero Exp ? (Exp)
Gramática para expressões aritméticas simples
13
Análise Sintática
  • Outro exemplo em programação

Stat ? Id Exp Stat ? StatStat Stat ? if Exp
then Stat else Stat Stat ? if Exp then Stat
Gramática para statements
14
Analise Sintática
  • A maioria dos construtores das LPs são expressos
    em GLC
  • Linguagens são projetadas a partir de GLC
  • É comum dividir os construtores em categorias
    sintáticas que englobam algum conceito particular
  • Expressões usada no cálculo de valores
  • Statements ações que ocorrem em um fluxo
  • Declarações propriedades dos nomes usados em
    outras partes do programa

15
Analise Sintática
  • Cada categoria sintática é denotada por um não
    terminal principal
  • Exp
  • Sif
  • Swh
  • Sat
  • ...
  • Categorias sintáticas podem se referir a não
    terminais de outras categorias
  • Podem também ser recursivas

16
Analise Sintática
  • Derivações
  • Método de reescrever as regras gramaticais
    através de substituição dos seus símbolos
    não-terminais
  • As substituições devem ser feitas até que apenas
    restes símbolos terminais
  • A seqüência de terminais restante deve ser
    definida pela linguagem

17
Analise Sintática
  • Definição formal para derivação
  • A relação de derivação ? é definida via três
    regras
  • ?N? ? ??? , se existe uma regra N ? ?
  • ? ? ?
  • ? ? ?, se existe um ? tal que ? ? ? e ? ? ?
  • Note que ?, ? e ? ? (T ? N)

18
Analise Sintática
  • Definição baseada em derivação para uma
    linguagem gerada por uma GLC
  • Dado uma GLC G com símbolo inicial S, símbolos
    terminais T e produções P, a linguagem L(G) que G
    gera é definida para ser o conjunto de todas as
    strings de símbolos terminais que podem ser
    obtidas por derivação a partir de S usando as
    produções P, ou seja, o conjunto w ? T S ? w

19
Analise Sintática
  • Exemplo
  • Dado a gramática G, verifique se o string aabbbcc
    pertence a L(G)
  • T ? R
  • T ? aTc
  • R ? ?
  • R ? RbR

Reposta? T ?
20
Analise Sintática
  • Diferentes derivações para a mesma questão
  • Qual a diferença?
  • Derivação mais a esquerda X Derivação mais a
    direita

21
Analise Sintática
  • Árvore Sintática
  • Pode ser representada como uma árvore
  • A raiz é o símbolo inicial
  • Resultados da produção dos símbolos não terminais
    são filhos
  • As folhas devem conter apenas símbolos terminais
  • Lendo as folhas da esquerda para a direita temos
    a palavra derivada
  • Produções que levam ao vazio também devem ser
    representadas, apesar de serem ignoradas na
    formação da palavra

22
Analise Sintática
  • Dada uma gramática G, a escolha da produção a ser
    derivada influencia na forma da árvore sintática
  • T ? R
  • T ? aTc
  • R ? ?
  • R ? RbR
  • Árvores sintática para a palavra aabbbcc

23
Analise Sintática
  • Quando uma gramática permite diferentes árvores
    sintáticas ela é dita ambígua
  • Quando usamos gramáticas para impor estrutura
    sobre um conjunto de tokens, tal estrutura tem
    que ser sempre a mesma

24
Analise Sintática
  • Exemplo de problema
  • Produções
  • E ? E E E E Numero
  • Como gerar a sentença
  • 3 4 5

E ? E E ? Numero E ? 3 E ? 3 E E ? 3
Numero E ? 3 4 E ? 3 4 Numero ? 3 4
5
E ? E E ? E E E ? Numero E E ? 3 E
E ? 3 Numero E ? 3 4 E ? 3 4 Numero ?
3 4 5
25
Analise Sintática
  • Exemplo de problema

E ? E E ? Numero E ? 3 E ? 3 E E ? 3
Numero E ? 3 4 E ? 3 4 Numero ? 3 4
5
E ? E E ? E E E ? Numero E E ? 3 E
E ? 3 Numero E ? 3 4 E ? 3 4 Numero ?
3 4 5
35
23
26
Analise Sintática
  • Em muitos (mas não todos) os casos, uma gramática
    ambígua pode ser reescrita em uma gramática
    não-ambígua
  • Outra opção é o uso de semântica externa para
    decidir pela árvore correta

27
Analise Sintática
  • Precedência de operadores
  • Explicitar precedência nas gramáticas
  • 2 3 5
  • Como tirar essa ambigüidade?

28
Analise Sintática
  • Alguns conceitos iniciais
  • Operador ? pode ser associativo a esquerda
  • Operador ? pode ser associativo a direita
  • Operador ? pode ser não associativo
  • Convenção
  • - e / são obrigatoriamente associativos a
    esquerda
  • e são opcionalmente associativos a esquerda
  • Exemplo de operador associado a direita
  • abc atribuição em C a(bc)
  • Exemplo de operador não associativo
  • 2 lt 3 lt 4 comparação em Pascal Não permitido

29
Analise Sintática
  • Reescrevendo expressões gramaticais ambíguas
  • Considere a seguinte gramática ambígua
  • Como torná-la não ambigua?
  • Se ? é associativo a esquerda, devemos forçar a
    gramática a ser recursiva a esquerda

E ? E ? E E ? num
E ? E ? E E ? E E ? num
Única árvore que pode se gerada
30
Analise Sintática
  • Reescrevendo expressões gramaticais ambíguas
  • E se for associativa a direita?
  • Forçar a gramática a ser recursiva a direita
  • E se for não associativa?
  • Sem regras recursivas

E ? E ? E E ? E E ? num
E ? E ? E E ? E E ? num
31
Analise Sintática
  • Reescrevendo expressões gramaticais ambíguas
  • Expandindo a idéia...
  • Operadores com a mesma precedência

E ? E E E ? E - E E ? E E ? num
32
Analise Sintática
  • Reescrevendo expressões gramaticais ambíguas
  • Expandindo a idéia...
  • Operadores com diferentes precedências

Exp ? Exp Exp2 Exp ? Exp - Exp2 Exp ?
Exp2 Exp2 ? Exp2 Exp3 Exp2 ? Exp2 / Exp3 Exp2 ?
Exp3 Exp3 ? num Exp3 ? (Exp)
33
Analise Sintática
  • Outras fontes de ambigüidade
  • Exemplo clássico do else em comandos de decisão
  • A convenção é casar o else com o if mais
    perto que ainda não tenha sido casado
  • Como representar isso na gramática?

If p then if q then s1 else s2
34
Analise Sintática
  • If-the-else podem ser tratados como operadores
    associativos a direita
  • Quando um if e um else casam, todas as
    ocorrências entre eles devem estar casadas
  • Precisamos de dois símbolos não-terminais
  • Matched condicionais com o else
  • Unmatched condicionais sem o else

35
Analise Sintática
  • Gramática não ambígua para comandos

Stat ? Stat2 Stat Stat ?
Stat2 Stat2 ? Matched Stat2 ?
Unmatched Matched ? if Exp then Matched else
Matched Matched ? id Exp Unmatched ? if
Exp then Matched else Unmatched Unmatched ? if
Exp then Stat2
Write a Comment
User Comments (0)
About PowerShow.com