Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Problema traduzione guidata dalla sintassi.
Forum - Algoritmi - Problema traduzione guidata dalla sintassi.

Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 18:54
Lunedì, 29/04/2013
Ciao a tutti sto studiando i compilatori dal libro "Compilatori Principi,tecniche e strumenti" e sono arrivato alla traduzione guidata dalla sintassi.
Devo capire come creare un albero sintattico di un'espressione, avendo la sua grammatica con le relative azioni semantiche, utilizzando gli attributi ereditati(inh) e sintetizzati(syn).
Per esempio con la grammatica L-attribuita per parser LL:

Produzioni:       Regole semantiche:
1)E --> TE'       E.node=E'.syn
                        E.num=T.node
                  
2)E'--> +TE'      E1'.inh=new Node('+',E'.inh,T.node)
                         E'.syn=E1'.syn

3)E'--> -TE'      E1'.inh=new Node('-',E'.inh,T.node)
                        E'.syn=E1'.syn

4)E'--> ε           E'syn=E.node

5)T --> (E)        T.node=E.node

6)T --> id          T.node=new Leaf(id,id.entry)

7)T --> num      T.node=new Leaf(num,num.val)

Leaf crea le foglie, mentre Node i nodi con etichetta +/-.
Il mio problema,nonostante abbia letto la spiegazione del libro,non riesco a capire che ragionamento e' stato fatto per scrivere le regole semantiche poiche' faccio un po' fatica a capire come vengono usati gli attributi sintatizzati ed ereditati. Potreste spiegarmele meglio?
Grazie in anticipo!

Ultima modifica effettuata da dmr il 29/04/2013 alle 18:58
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:10
Lunedì, 29/04/2013
Sono dettagli d'implementazione per l'albero sintattico. Attributi sintetizzati vengono passati verso di SOPRA (dai nodi piu' bassi a quelli piu' alti), mentre gli attributi ereditati vengono passati verso il BASSO (dai nodi piu' alti a quelli piu' bassi).

Ad esempio nella prima regola:

E --> TE'

E e' il nodo piu' alto. T ed E' sono figli di E.

    E
   / \
  T   E'

Allora si passa il valore di E'.syn (passando un valore dal basso verso l'alto) a E.node.

E' solo un modo per passare valori nell'abstract syntax tree. Tutto qua.


Il mio blog: https://piero.dev
PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 9:32
Martedì, 30/04/2013
Ok adesso ho capito ! Grazie mille :k:

PM Quote