Your SlideShare is downloading. ×
Anotações na árvore sintática abstrata: o contextoA análise léxica e sintática executam processamento livre de contexto.Ou...
O avaliador de atributos avalia as regras semânticas em determinadaordem para calcular todos os valores de uma AST, sem ut...
Exemplo : const definition: const pi = 3,14 (const id = expr;)Utiliza-se o algoritmo de classificação topológica para perc...
arvore de analise em uma lista encadeada, classificamos essa listatopologicamente (ordem parcial) de acordo com as depende...
A árvore gramatical que mostra os valores dos atributos é chamada deárvore gramatical anotadaCada produção A → α está asso...
Atributos herdados são convenientes para expressar construções deLPs em relação ao contexto em que aparecemBastante útil n...
Uma classificação topológica é uma ordenação dos nós de um grafodo primeiro ao último nó ordenadoSe mi → mj é uma aresta, ...
Upcoming SlideShare
Loading in...5
×

áRvore sintatica

1,370

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,370
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "áRvore sintatica"

  1. 1. Anotações na árvore sintática abstrata: o contextoA análise léxica e sintática executam processamento livre de contexto.Outras informações e verificações são efetuadas na fase de análisesemântica ou de contexto.Os dados necessários para a análise semântica são armazenados sob aforma de atributos na AST (poderiam estar na tabela de símbolos ouem variáveis locais do analisador).A análise semântica calcula os atributos e verifica as condições decontexto. Pode ser escrit a à mão ou ser gerada através de umaespecificação (gramática de atributos)Gramática de atributos baseia -se no paradigma de programação dedataflow (os valores podem ser calculados em ordem arbitrária).GLC usada na construção do analisador é estendida com doisrecursos:1. Para cada simbolo gramatical S, terminal ou não terminal, sãoespecificados zero ou mais atributos, com nome e tipo (são chamadosatributos formais). Os atributos reais são alocados em cada nó criadopara S na AST. Os atributos guardam informações sobre a semânticaassociada a esse nó. Assim, todos os nós na AST do simbolo Spossuem os mesmos atributos formais mas atributos reais diferentes.2. Para cada regra de produção N -> M1, ..., Mn, está associado umconjunto de regras computacionais (regras de avaliação de atributos),que verificam condições de contexto e emitem mensagens deadvertência e erro. As regras estão associadas às produções e não aosseus não-terminais. Os atributos devem atender ao seguinte requisito:Cada símbolo gramatical possui um conjunto de atr ibutos associadosdivididos em dois grupos:w Atributos sintetizados: cujo valor calculado em função dos filhosw Atributos herdados: cujo valor é herdado do nó pai e/ou irmãos
  2. 2. O avaliador de atributos avalia as regras semânticas em determinadaordem para calcular todos os valores de uma AST, sem utilizar umvalor não tenha sido previamente calculado. Execução similar a umamáquina de dataflow: um cálculo só é executado quando todos osvalores que ele depende são determinados. Os valores inicialmentedisponíveis advém dos atributos sintetizados, vindos do próprio textodo programa. O avaliador continua a propagar os valores atécompletar o preenchimento dos atributos da AST (caso não hajaciclos).Exemplo figura – atributos herdados a direita, sintetizados aesquerda. Tabela de simbolos pode ser um atributo herdadoSegundo a teoria inicial de Knuth (1968), o simbolo inicial não temnenhum atributo herdado, e os terminais não possuem nenhumatributo. Simbolos terminais auxiliam em geral a sintaxe apenas, ent ãonão teriam nenhuma semäntica associada. Exceções interessantes: osimbolo inicial pode ter atributos para geraçäo de codigo espec íficapara uma maquina. Ex: processador = pentium VI, 386, Sparc.Problema: Como avaliar os atributos ?Possibilidade de loop infinito nos cálculos. Existem algoritmos paradetecção de loops em gramáticas de atributos. Grafo de dependênciaCada nó em uma árvore sintática corresponde a uma regra deprodução N -> M1, ..., Mn; identificado com o simbolo N e contém osatributos de N e n ponteiros para nós. Fluxo de dados para nós.Representados por retangulos à esquerda (herdados) e à direita(sintetizados) do simbolo na arvore.Nome correto seria grafo de fluxo de dados e não grafo dedependencia, pois representa o fluxo e não a dependencia dainformacao (sentido inverso). Se os dados fluem da variavel a para bentao b depende de a.
  3. 3. Exemplo : const definition: const pi = 3,14 (const id = expr;)Utiliza-se o algoritmo de classificação topológica para percorrer ografo de dependencia e ordenar a execução das ações semanticas.Dessa forma, garante-se que dada uma regra semantica b = f (c1, ...,cn), todos os atributos de ci estão disponiveis (calculados) antes daaplicação da função f.Cálculo de atributosO avaliador de atributos deve :1. Criar a AST2. Alocar espaço para os atributos da árvore3. Anotar a arvore preenchendo os atributos dos terminais na arvorecom valores derivados das representacoes dos terminais4. Executar regras de avaliacao nos nós para atribuir valores aatributos ate que nenhum novo valor de atributo seja usado antes deestar disponivel5. Detectar quando não for possivel faze-loImplementacao do avaliador de atributos – utilizar uma maquinadataflow.Metodo Simples: visitar todos os nós do grafo de flu xo de dados,executando todas as atribuiçoes possiveis em cada nó quando ovisitarmos e repetir esse processo ate que todos os atributossintetizados da raiz tenham recebido um valor.Ordem calculada dinamicamente, ordem em que os atributos sãoavaliados é determinada dinamicamente.Tenta executar todas as regras para um nó, percorre os filhos, e aoretornar deles, tenta mais uma vez executar todas as atribuicoes. Asatribuicoes antes da visita propagam os atributos herdados de cimapara baixo e as atribuicoes após a visita colhem os atributossintetizados dos filhos e os propagam para cima.Outro método que mostra um limite superior sobre o tempo necessariopara realizar a avaliacao de atributos. Vincula-se todos os atributos da
  4. 4. arvore de analise em uma lista encadeada, classificamos essa listatopologicamente (ordem parcial) de acordo com as dependencias dedados e executamos as atribuicoes na ordem classificada. Com natribuicoes e d dependencias de dados, classifica las topologicamentecom um algoritmo recursivo custa O (n+d), as atribuicoessubsequentes custarao O(n). A classificacao topologica poderá revelarquaisquer ciclos.Deteccao dinamica de ciclos – verifica se o algoritmo já passou donumero máximo (conhecido) de rodadas.Alocacao de atributos: listas podem aumentar o tempo de busca eatualizacao, e atributos são em geral copiados. Pode-se usar umapilha.Modificacao no algoritmo de construcao da AST. AST vira um GDA(grafo dirigido acíclico) para subexpressoes comuns – Aho 125.Restricoes as gramaticas de atributos:1. Gramaticas L-atribuidas. Um atributo herdado de um filho deum não terminal N pode depender apenas de atributos sintetizados defilhos a esquerda dele na regra de producao para N e dos atributosherdados do proprio N e as gramat icas S-atribuidas que não podem terabsolutamente atributos herdados.Top down constroi os nos da AST da esq para a direita primeiro o nopai e em seguida os filhos. Na bottom up, primeiro os filhos depois opai.Regras semânticas estabelecem dependências entre os atributosrepresentados em um grafoO grafo determina a ordem de avaliação das regrasA avaliação das regras semânticas gera os valores dos atributos
  5. 5. A árvore gramatical que mostra os valores dos atributos é chamada deárvore gramatical anotadaCada produção A → α está associado a um conjunto de regrassemânticas na forma:B := f(c1, c2, ..., ck)Onde f é uma função que vigora em uma das seguintes situações:w B é um atributo sintetizado de A e c 1, c2, ..., ck são atributospertencentes aos símbolos gramaticais da produçãow B é um atributo herdado, pertencente a um dos símbolosgramaticais do lado direito da produção e c1, c2, ..., ck são atributospertencentes aos símbolos gramaticais da produçãoExemplo:Produção Regra SemânticaL→En Imprimir(E.val)E → E1+T E.val:= E1.val + T.valE→T E.val:= T.valT → T1 * F T.val:= T1.val * F.valT →F T.val:= F.valF → (E) F.val:= E.valF → dígito F.val:= dígito.lexvalNa tradução dirigida pela sintaxe assume-se que os terminais tenhamsomente atributos sintetizados na medida em que as definições nãoprovidenciem quaisquer regras semânt icasOs valores para os atributos dos terminais costumam ser fornecidospelo léxico:F → dígito F.val= dígito.lexvalAtributos sintetizados são bastante usados na práticaUma definição dirigida pela sintaxe somente com atributossintetizados é chamada de definição S-atribuídaOs atributos costumam ser avaliados de baixo para cima, das folhaspara a raiz
  6. 6. Atributos herdados são convenientes para expressar construções deLPs em relação ao contexto em que aparecemBastante útil na verificação de tiposControlar se um identificador aparece do lado esquerdo (endereço) oudireito (valor) de uma atribuiçãoProdução Regra SemânticaD→TL L.in:= T.tipoT → int T.tipo:= inteiroT → float T.tipo:= realL → L1, id L1.in:= L.in incluir_tipo(id.entrada, L.in)L → id incluir_tipo(id.entrada, L.in)Um Grafo de Dependências é construído para uma árvore gramaticalEle mostra as interdependências entre os atributos dos nós da árvoregramaticalDefine uma ordem de avaliação das regras semânticas em umatradução dirigida pela sintaxeAlgoritmopara cada nó n na árvore gramatical faça para cada atributo a do símbolo gramatical em n faça gere um nó para a no grafo de dependências fim parafim parapara cada nó n na árvore gramatical faça para cada regra semântica b:= f(c 1, c2, ...,ck) faça para i= 1 até k faça gere uma aresta a partir do nó ci até o nó b fim para fim parafim para
  7. 7. Uma classificação topológica é uma ordenação dos nós de um grafodo primeiro ao último nó ordenadoSe mi → mj é uma aresta, então mi aparece antes de m j na classificaçãotopológicaOs atributos c1, ..., c k dos quais uma regra semântica dependa b:= f(c1,..., ck ) devem estar disponíveis antes de f ser avaliadaMétodos propostos para avaliar regras semânticasw Método das árvores gramaticais : gera a ordem de avaliaçãoautomaticamente em tempo de compilação. Falha se existem ciclos nografow Método baseado em regras : gera a ordem de avaliaçãoautomaticamente em tempo de construção do compilador.w Método alienado: uma ordem de avaliação é escolhida semconsiderar as regras semânticas. Restringe a classe de definiçõesdirigidas a sintaxe que podem ser aplicadas.Crie uma ordenação topológica baseada em regras para a cadeiafloat x, y

×