Remove ads
Da Wikipédia, a enciclopédia livre
Uma gramática de atributos é uma formalização que permite definir os atributos para as produções de uma gramática formal, associando estes atributos com valores. A avaliação ocorre nos nodos da árvore sintática abstrata, quando a linguagem é processada por algum analisador sintático ou compilador.
Os atributos são divididos em dois grupos: os atributos sintetizados e atributos herdados. Os atributos sintetizados, também denominados derivados, são associados aos não-terminais das regras de produção aos quais eles se encontram ligados. Os atributos herdados são passados através dos nodos pais e são definidos por asserções nas produções cujo lado direito contenha referências ao não terminal ao qual se encontram ligados.[1]
Em algumas abordagens, os atributos sintetizados são utilizados para transmitir informação semântica no sentido bottom-up na árvore sintática ao passo que os atributos herdados passam informações semânticas no sentido top-down na árvore sintática. Por exemplo, quando se está a construir uma ferramenta de tradução, como um compilador pode-se atribuir valores semânticos à construções sintáticas. Também é possível realizar verificações semânticas associadas à gramática de atributos, representando regras da linguagem não contempladas explicitamente pela sintaxe.
Gramáticas de atributos também podem ser utilizadas para traduzir a árvore sintática diretamente para o código específico de algumas máquinas, ou em alguma línguagem intermediária.
Uma Gramática de Atributos é uma tupla onde:
O seguinte é uma gramática livre de contexto simples que pode descrever uma linguagem composta de multiplicação e adição de números inteiros.
Expr → Expr + Term
Expr → Term
Term → Term * Fator
Term → Fator
Fator → "(" Expr ")"
Fator → inteiro
A seguinte gramática de atributos pode ser usada para calcular o resultado de uma expressão escrita na gramática. Note-se que essa gramática só usa valores sintetizados, e por isso é uma gramática S-atribuída.
Expr1 → Expr2 + Term [ Expr1.valor = Expr22.valor + Term.valor ]
Expr → Term [ Expr.valor = Term.valor ]
Term1 → Term2 * Fator [ Term1.valor = Term2.valor * Fator.valor ]
Term → Fator [ Term.valor = Fator.valor ]
Fator → "(" Expr ")" [ Fator.valor = Expr.valor ]
Fator → inteiro [ Fator.valor = strToInt(inteiro.str) ]
As gramáticas de atributo foram inventadas por Donald Knuth e Peter Wegner.[2] Enquanto Donald Knuth tem o crédito pelo conceito geral, Peter Wegner inventou os atributos herdados durante uma conversa com Knuth. Algumas ideias embrionárias remontam[2] à obra de Edgar T. "Ned" Irons,[3] o autor da linguagem IMP.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.