Oppure

Loading
29/04/13 16:54
dmr
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 29/04/13 16:58
aaa
29/04/13 20:10
pierotofy
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: piero.dev
30/04/13 7:32
dmr
Ok adesso ho capito ! Grazie mille :k:
aaa