Compiladores, Aula Nº 10 João M. P. Cardoso Análise Sintáctica Compiladores, Aula Nº 10 João M. P. Cardoso Aula 10
Á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
Á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
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
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
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
Á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
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
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
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
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
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