9

Come posso trovare se un attributo è sintetizzato o ereditato dalle produzioni di una grammatica?Sintesi e attributi ereditati

Suppongo che l'attributo debba essere predefinito nel problema, se il suo valore dipende dai nodi figlio o padre. Ma c'è un modo per analizzare se un attributo è ereditato o sintetizzato dalle produzioni grammaticali.

+0

cioè un attributo t deve essere predefinito per essere S o I. Potrei dire dalle regole semantiche associate alle produzioni o meno. Per favore, fai un esempio. – user2047167

risposta

7

Attributo sintetizzato: un attributo che ottiene i suoi valori dagli attributi associati ai figli del suo non terminale.

Attributo ereditato: un attributo che ottiene i suoi valori dagli attributi associati al genitore (o ai fratelli) del suo non terminale.

  **PRODUCTION**        **SEMANTIC RULES** 

      T->FT’         T’.inh=F.val 
                 T.val=T’.syn 

      T’->*FT1’        T1’.inh=T’.inh*F.val 
                 T’.syn=T1’.syn 

      T’->Ɛ         T’.syn=T’.inh 

      F->id         F.val=id.lexval 

Come si può vedere dalla grammatica data (produzioni), inh è un attributo ereditato e syn è un attributo sintetizzato.

+1

T.val = T'.syn vedendo solo questa regola, è val syn. attributo .... – user2047167

+1

@ user2047167-Sì, val è un syn. attributo come T.val sta prendendo valori dal suo nodo figlioT.syn; hai assolutamente ragione! –

+1

Cosa succede se c'è un attributo che in una regola usa l'attributo genitore per la sua valutazione e in un'altra regola usa il suo valore figlio per la valutazione – user2047167

1

L'attributo che prende i valori dei dati dai relativi nodi figlio, viene chiamato attributo sintetizzato.

Questi sono anche chiamati produzione s-attribuita. L'attributo che prende i valori dei genitori o dei nodi fratelli è chiamato attributi ereditati. La regola di produzione con attributo ereditato è chiamata produzioni attribuite a L.

Problemi correlati