b'\n_START_ARTICLE_\nGram\xc3\xa1tica de atributos\n_START_PARAGRAPH_\nUma gram\xc3\xa1tica de atributos \xc3\xa9 uma formaliza\xc3\xa7\xc3\xa3o que permite definir os atributos para as produ\xc3\xa7\xc3\xb5es de uma gram\xc3\xa1tica formal, associando estes atributos com valores. A avalia\xc3\xa7\xc3\xa3o ocorre nos nodos da \xc3\xa1rvore sint\xc3\xa1tica abstrata, quando a linguagem \xc3\xa9 processada por algum analisador sint\xc3\xa1tico ou compilador.\n_START_SECTION_\nTipos de Atributos\n_START_PARAGRAPH_\nOs atributos s\xc3\xa3o divididos em dois grupos: os atributos sintetizados e atributos herdados. Os atributos sintetizados, tamb\xc3\xa9m denominados derivados, s\xc3\xa3o associados aos n\xc3\xa3o-terminais das regras de produ\xc3\xa7\xc3\xa3o aos quais eles se encontram ligados. Os atributos herdados s\xc3\xa3o passados atrav\xc3\xa9s dos nodos pais e s\xc3\xa3o definidos por asser\xc3\xa7\xc3\xb5es nas produ\xc3\xa7\xc3\xb5es cujo lado direito contenha refer\xc3\xaancias ao n\xc3\xa3o terminal ao qual se encontram ligados._NEWLINE_Em algumas abordagens, os atributos sintetizados s\xc3\xa3o utilizados para transmitir informa\xc3\xa7\xc3\xa3o sem\xc3\xa2ntica no sentido bottom-up na \xc3\xa1rvore sint\xc3\xa1tica ao passo que os atributos herdados passam informa\xc3\xa7\xc3\xb5es sem\xc3\xa2nticas no sentido top-down na \xc3\xa1rvore sint\xc3\xa1tica. Por exemplo, quando se est\xc3\xa1 a construir uma ferramenta de tradu\xc3\xa7\xc3\xa3o, como um compilador pode-se atribuir valores sem\xc3\xa2nticos \xc3\xa0 constru\xc3\xa7\xc3\xb5es sint\xc3\xa1ticas. Tamb\xc3\xa9m \xc3\xa9 poss\xc3\xadvel realizar verifica\xc3\xa7\xc3\xb5es sem\xc3\xa2nticas associadas \xc3\xa0 gram\xc3\xa1tica de atributos, representando regras da linguagem n\xc3\xa3o contempladas explicitamente pela sintaxe._NEWLINE_Gram\xc3\xa1ticas de atributos tamb\xc3\xa9m podem ser utilizadas para traduzir a \xc3\xa1rvore sint\xc3\xa1tica diretamente para o c\xc3\xb3digo espec\xc3\xadfico de algumas m\xc3\xa1quinas, ou em alguma l\xc3\xadnguagem intermedi\xc3\xa1ria.\n_START_SECTION_\nExemplo\n_START_PARAGRAPH_\nO seguinte \xc3\xa9 uma gram\xc3\xa1tica livre de contexto simples que pode descrever uma linguagem composta de multiplica\xc3\xa7\xc3\xa3o e adi\xc3\xa7\xc3\xa3o de n\xc3\xbameros inteiros._NEWLINE_ Expr \xe2\x86\x92 Expr + Term_NEWLINE_ Expr \xe2\x86\x92 Term_NEWLINE_ Term \xe2\x86\x92 Term * Fator_NEWLINE_ Term \xe2\x86\x92 Fator_NEWLINE_ Fator \xe2\x86\x92 "(" Expr ")"_NEWLINE_ Fator \xe2\x86\x92 inteiro_NEWLINE_A seguinte gram\xc3\xa1tica de atributos pode ser usada para calcular o resultado de uma express\xc3\xa3o escrita na gram\xc3\xa1tica. Note-se que essa gram\xc3\xa1tica s\xc3\xb3 usa valores sintetizados, e por isso \xc3\xa9 uma gram\xc3\xa1tica S-atribu\xc3\xadda._NEWLINE_ Expr\xe2\x82\x81 \xe2\x86\x92 Expr\xe2\x82\x82 + Term [ Expr\xe2\x82\x81.valor = Expr2\xe2\x82\x82.valor + Term.valor ]_NEWLINE_ Expr \xe2\x86\x92 Term [ Expr.valor = Term.valor ]_NEWLINE_ Term\xe2\x82\x81 \xe2\x86\x92 Term\xe2\x82\x82 * Fator [ Term\xe2\x82\x81.valor = Term\xe2\x82\x82.valor * Fator.valor ]_NEWLINE_ Term \xe2\x86\x92 Fator [ Term.valor = Fator.valor ]_NEWLINE_ Fator \xe2\x86\x92 "(" Expr ")" [ Fator.valor =  Expr.valor ]_NEWLINE_ Fator \xe2\x86\x92 inteiro [ Fator.valor = strToInt(inteiro.str) ]'