Quali sono le strategie generali per ridurre un albero di analisi (ad esempio albero di sintassi concreto) in un albero di sintassi astratto?Come ridurre il mio albero di analisi in un albero di sintassi astratto?
Per esempio, ho il seguente regola grammaticale:
statement_list : statement
| statement_list statement
che, se lasciato come un albero sintattico, genererà ventaglio di uscita che assomiglia
program
statement_list
statement_list
statement
definition
p_type
assignment
statement
definition
statement
assign
assignment
Se concatenare i figli di ogni nodo (dal momento che un elenco di istruzioni non ha significato intrinseco dopo l'analisi), posso ottenere il seguente
program
definition
p_type
assignment
definition
assign
assignment
Questo ha funzionato bene - tuttavia, non sono a conoscenza di alcuna "regola" per farlo. Esistono regole grammaticali specifiche che dovrei cercare di semplificare? È una questione di tatto o c'è un processo più meccanicistico?
Si può optare per un "look and feel" morbido, ma per lo più un sacco di lavoro. Puoi farlo essenzialmente meccanicamente rimuovendo i nodi che puoi rigenerare usando la grammatica. Vedi http://stackoverflow.com/a/1916687/120163 –