• Nenhum resultado encontrado

Compiladores 07

N/A
N/A
Protected

Academic year: 2021

Share "Compiladores 07"

Copied!
40
0
0

Texto

(1)

Compiladores –

Análise Sintática

Rayol de Mendonça Neto

rayol.neto@gmail.com

(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

atribuição identificador identificador expressão expressão expressão número := 35 SOMA SOMA +

(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

(4)

Análise Sintática

 Relembrando as regras da gramática regular

A  wB A  w

(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?

 A string é tratado como uma expressão plana, não tendo estrutura

(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 < , Q, , , q0, I, F>, 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

(8)

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

(9)

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?

(10)

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)

(11)

Análise Sintática

• A maioria dos construtores das LP´s 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

(12)

Análise Sintática

• Cada categoria sintática é denotada por um não terminal principal

 Exp  Sif  Swh  ...

• Categorias sintáticas podem se referir a não terminais de outras

categorias

(13)

Análise 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

(14)

Análise 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}

(15)

Análise 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 

(16)

Análise Sintática

• Diferentes derivações para a mesma questão

 Qual a diferença?

(17)

Análise Sintática

• Árvore Sintática

 Pode ser representada como uma árvore

 A raiz é a variável de partida da gramática

 Os vértices interiores obrigatoriamente são variáveis

 Se A é um vértice interior e X1, X2,..., Xn são os filhos de A, então A → X1X2...Xn é uma derivação da gramática

 Um vértice folha é um símbolo terminal ou a palavra vazia λ (neste caso, λ é filho único)

(18)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3?

(19)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3?

E

(20)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3? E E E ) ( E + C

(21)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3? E E E ) ( E E - E + C 3

(22)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3? E E E ) ( E E - E C C + C 3

(23)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3? E E E ) ( E E - E C C CC + 2 C 3

(24)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3? E E E ) ( E E - E C C CC 1 0 + 2 C 3

(25)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3? E E E ) ( E E - E C C CC 1 0 ( 1 0 - 2 ) + 3 + 2 C 3

(26)

Análise Sintática

• Considere as regras

• E → E+E | E-E | (E) | C • C → CC | 0 | 1 | 2 | 3 | 4

| 5 | 6 | 7 | 9

• Qual a árvore de derivação

ara (10-2)+3? E E E ) ( E E - E C C CC 1 0 ( 1 0 - 2 ) + 3 + 2 C 3 Raiz é a variável de partida

Vértices Internos são sempre variáveis

E – E (filhos) é Uma derivação de E (pai)

Toda folha é um terminal (ou λ)

(27)

Analise Sintática

• Uma Gramática Livre do Contexto é dita uma Gramática Ambígua,

se existe uma palavra que possua duas ou mais árvores de derivação

• Uma forma equivalente de definir ambiguidade de uma gramática

é a existência de uma palavra com duas ou mais derivações mais à esquerda (direita)

• Quando usamos gramáticas para impor estrutura sobre um

(28)

Analise Sintática

• Exemplo de problema  Produções E  E + E | E * E | C C→ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9

 Como gerar a sentença

 3 + 4 * 5 E  E + E  C + E  3 + E  3 + E * E  3 + C * E  3 + 4 * E  3 + 4 * C  3 + 4 * 5 E  E * E  E + E * E  C + E * E  3 + E * E  3 + C * E  3 + 4 * E  3 + 4 * C  3 + 4 * 5

(29)

Analise Sintática

• Exemplo de problema 35 23 E  E + E  C + E  3 + E  3 + E * E  3 + C * E  3 + 4 * E  3 + 4 * C  3 + 4 * 5 E  E * E  E + E * E  C + E * E  3 + E * E  3 + C * E  3 + 4 * E  3 + 4 * C  3 + 4 * 5 E E + E E * E C 3 C 4 C 5 E E E * E + E C 5 C 3 C 4

(30)

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

(31)

Analise Sintática

• Precedência de operadores

 Explicitar precedência nas gramáticas

 2 + 3 * 5

(32)

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

 a=b=c {atribuição em C} a=(b=c)

Exemplo de operador não associativo

(33)

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

(34)

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

(35)

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

(36)

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)

(37)

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?

(38)

Analise Sintática

• If-then-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”

(39)

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

(40)

Exercícios

• Utilizando a gramática abaixo, desenhe a árvore

sintática mais a esquerda e mais a direita para a palavra 0011122

• P → Q • P → 0P2 • Q → λ • Q → 1Q

Referências

Documentos relacionados

A bancada conta com diversas funções diferentes, sendo um fogão por indução com 4 bocas, uma balança para auxiliar no preparo de refeições, 4 módulos de horta removíveis, na

Artigo 5º ­ Para que a atividade de estágio seja validada para fins acadêmicos para o curso de Design de Produto, o estudante deverá, antes de iniciar as atividades de

Isto sucede porque a Escola tende a separar actividade do contexto no qual a aprendizagem decorre, criando um conflito entre actividade autêntica e actividade

Sendo assim a coleta de dados se deu por meio de atividades escritas em português a partir de um tema proposto livre e comum, com o apoio de recurso visual

[r]

O presente trabalho tem como objetivo quantificar a soma térmica para cada fase fenológica da cultura da melancia, híbrido Manchester, nas condições climáticas

Diante disso, a análise de produção de antígeno de superfície HBsAg pelo sistema de expressão em baculovírus e células de inseto é um estudo bastante promissor para a

A diferença entre as duas línguas é apresentada por três fatores, que, segundo BULL 5 , seriam: primeiro, as formas livres em inglês são formas verbais cuja função consiste