Activism, Apple, Computer Science, Culture, DB, Drupal, Guitar, Languages Processing, LaTeX, Left, Linux, Mac, National Geographic, Open Source, Perl, Portugal, XML, World, ...

Gramáticas de Atributos


Gramática de atributos

Uma gramática de atributos é uma maneira formal de definir atributos para as produções de uma dada textgramática, associando esses atributos a valores. A avaliação ocorre no nós da árvore de derivação quando a linguagem é tratada por um analisador sintáctico (ou um compilador).

Existem dois tipos distintos de atributos, sendo uns sintetizados e outros herdado. Os primeiros resultam das regras de produção da gramática, sendo que também podem usar o valor de atributos herdados. Os segundos são atributos que são passados para as folhas a partir de nós parentes.

Desta forma, as gramáticas de atributos podem transportar a informação de qualquer sítio para qualquer sítio na árvore sintáctica, isto de maneira controlada e formal. Assim sendo, ilustram-se as razões que tornam as gramáticas de atributos serem poderosas.


Herança

A herança é um principio permitindo a reutilização e adaptabilidade de um certo 'objecto'. O conceito segue o mesmo principio que o de uma árvore genealógica. Isto é, os 'filhos' (elementos derivados) herdam das características dos 'pais' (elementos base).

Esses objectos, ou elementos, possuem atributos e/ou métodos que são próprios a cada um e podem ser transmitidos aos elementos das próximas gerações na árvore. Desta forma, pode-se etiquetar a 'herança' como 'generalização' devido às relações ditas is-a (em Português, "é um/uma") representarem uma hierarquia entre elementos de qualquer natureza.

Cada um desses elementos 'filhos' podem então possuir as mesmas características que os elementos 'pais' e ainda possuir características suplementares que lhes são próprias. Note-se que um elemento 'filho' pode-se tornar 'pai' por sua vez, podendo assim construir-se uma 'árvore genealógica' com várias gerações.


Propagação de atributos

A propagação dos atributos numa GA pode ser um excelente sinónimo para o conceito de herança. De facto pode-se dizer que se propagam os atributos herdados através de um 'canal', podendo-se assim fazer o paralelismo entre o conceito de herança numa GA e uma pipeline.

Isto é, o início da pipeline é o nó raiz da árvore sintáctica. À medida que se encontra um símbolo não-terminal, passa-se os argumentos ("estado da computação") para estes por ordem hierárquica, isto é, entre 'pai' e 'filho' e seguidamente entre 'irmãos'. O resultado da computação dessa sub-árvore apenas é devolvido para cima quando todas as sub-árvores relativas esse ponto tenham sido processadas, assim sucessivamente até à raiz. Assim sendo, pode-se ver esse 'caminho' dos atributos como uma pipeline onde a entrada de uns é a saída dos outros, tal como exemplificado na seguinte figura:


Esquema Herança

Note-se a propagação dos atributos nas sub-árvores pode ser feita "em paralelo", o que quer dizer que não precisa de se esperar pela computação de todos os elementos anteriores para passar atributos para o próximo nó da árvore. Isto de ponto de vista teórico, como ordem que se infere no grafo de dependências é uma ordem topológica (ou seja parcial), há hipótese da computação dos elementos decorrer em paralelo. No entanto, e apesar de muitos estudos sobre a criação de Calculadores de Atributos Concorrentes, a maioria das vezes a implementação do grafo de dependências é de ordem total, tornando a propagação do atributos sequencial.

Comments

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Web page addresses and e-mail addresses turn into links automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.