5

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?

+1

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 –

risposta

3

Non si tratta di "sentire". Un albero di sintassi astratta dipende dal significato (semantica) di ciò che è stato analizzato, e penso che queste sarebbero le regole:

  1. rimuovere i nodi per i token che non aggiungono significato. Quelle sono le parole chiave intermedie (come "then"), i separatori (come la virgola) e le parentesi (come parentesi).
  2. Promuovi token significativi (come "if") per essere il genitore di altri token nella stessa regola.

Non esiste una singola ricetta. Dipende da cosa significano le frasi nella lingua di arrivo.

+0

Apprezzo la risposta, ma sembra che tu ti stia contraddendo. Dici che "Non si tratta di" sentire "" ma le tue regole dipendono dalla lingua. Se ci fossero alcuni parametri da seguire, sarei d'accordo sul fatto che non è una questione di tatto, ma così com'è sicuramente si sente in questo modo. – sdasdadas

+0

Ammetto ogni giorno che il design (design della lingua in particolare) è ingegneristico 50/50. Va bene? – Apalala

+0

Sì, certo, scusa, ho dimenticato di tornare a questa domanda. Grazie per l'aiuto. – sdasdadas

Problemi correlati