Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Compiladores, Aula Nº 10 João M. P. Cardoso
Análise Sintáctica Compiladores, Aula Nº 10 João M. P. Cardoso Aula 10
2
Árvore Sintáctica Nós internos: símbolos não-terminais
Folhas: símbolos terminais Laços: De símbolos não-terminais do LHS da produção A nós do RHS da produção Captura a derivação da frase (String) Aula 10
3
Árvore Sintáctica para (2-1)+1
Start Expr Expr Expr OP + OPEN ( CLOSE ) Expr INT 1 Expr Expr OP - INT 2 INT 1 Aula 10
4
Ambiguidade numa Gramática
Múltiplas derivações (como consequência: múltiplas árvores sintácticas) para a mesma String Derivação e árvore sintáctica reflecte usualmente a semântica do programa Ambiguidade na gramática reflecte muitas das vezes ambiguidades na semântica da linguagem (considerada indesejável) Aula 10
5
Exemplo de ambiguidade
Duas árvores sintácticas para 2-1+1 Árvore correspondente a 2-(1+1) Árvore correspondente a (2-1)+1 Start Start Expr Expr Expr OP - Expr Expr OP + Expr INT 2 INT 1 Expr OP + Expr Expr OP - Expr INT 1 INT 1 INT 2 INT 1 Aula 10
6
Eliminação de ambiguidade
Solução: modificar gramática Faz todos os operadores com associação à esquerda Gramática Original Start Expr Expr Expr OP Expr Expr INT Expr OPEN Expr CLOSE Gramática Modificada Start Expr Expr Expr OP INT Expr INT Expr OPEN Expr CLOSE Aula 10
7
Árvore sintáctica para a gramática
Apenas uma árvore sintáctica para: 2-1+1 Árvore sintáctica inválida Árvore sintáctica válida Start Start Expr Expr Expr OP - Expr Expr OP + INT 1 INT 2 Expr OP + Expr Expr OP - INT 1 INT 1 INT 1 INT 2 Aula 10
8
Violação de prioridade
Árvore sintáctica para 2-3*4 Todos os operadores associam à esquerda Viola prioridade de * sobre + 2-3*4 associa como (2-3)*4 Start Expr Expr OP * INT 4 Expr OP - INT 3 INT 2 Aula 10
9
Resolver prioridade Gramática Modificada Gramática Original
OP1 = + | - OP2 = * | / INT = [0-9] [0-9]* OPEN = ( CLOSE = ) Start Expr Expr Expr OP1 Term Expr Term Expr OPEN Expr CLOSE Term Term OP2 INT Term INT Gramática Original OP = + | - | * | / INT = [0-9] [0-9]* OPEN = ( CLOSE = ) Start Expr Expr Expr OP INT Expr INT Expr OPEN Expr CLOSE Aula 10
10
Modificação nas Árvores Sintácticas
Nova Árvore sintáctica para 2-3*4 Velha Árvore sintáctica para 2-3*4 Start Start Expr Expr Expr OP * Expr OP1 - INT 4 Term Term Expr OP - INT 3 Term OP2 * INT 4 INT 2 INT 2 INT 3 Aula 10
11
Ideia Geral Agrupar operadores por níveis de prioridade
* e / estão no nível de topo + e – estão no nível a seguir Símbolo não-terminal para cada nível de prioridade Term é não-terminal para * e / Expr é não-terminal para + e - Pode-se fazer associatividade dos operadores à esquerda ou à direita em cada nível Generalizar para níveis arbitrários de prioridades Aula 10
12
Exercícios (TPC) Especificar utilizando a representação BNF gramáticas correspondentes às expressões regulares: [0-9]+ e [0-9]* Dada a gramática: NUM = [0-9]+ ID = [A-Za-Z][0-9A-Za-z]* Expr Expr “+” Term | Expr “–” Term | Term Term Term “*” Factor | Term “/” Factor | Factor Factor Primary “^” Factor | Primary Primary “-”Primary | Element Element “(“ Expr “)” | NUM | ID Quais as árvores sintácticas para: 5-2*3 y^3 Aula 10
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.