Domanda

Ho un AST generato tramite ANTLR, e ho bisogno di convertirlo in un DLR compatibile con uno (Expression Trees). Tuttavia, sembrerebbe che non posso usare matchers albero modello per questo, come gli alberi di espressione hanno bisogno dei loro sottostrutture in esemplificazione (che non posso ottenere). Quale soluzione sarebbe meglio per me di utilizzare?

È stato utile?

Soluzione

Ho fatto qualcosa di molto simile alcuni anni fa -. Non ho costruito una struttura DLR, ma ho costruito la mia struttura ad albero di espressione, che aveva bisogno anche gli argomenti in fase di costruzione (per raggiungere l'immutabilità)

Allora, ho lavorato con ANTLR v2 - e devo ammettere che io non sono a conoscenza della nuova sintassi v3, più non mi ricordo tutti i dettagli su come ho fatto allora - così invece di fornire con un esempio completamente risolti, mi limiterò a cercare di raccontare la mia storia (non sono sicuro, se si applica al vostro problema, anche!):

Prima di tutto, non è stato necessario per costruire la mia struttura da l'AST. Ho usato solo costruttore AST di ANLTR come veicolo: Ogni regola edificio AST può restituire un oggetto, oltre al nodo AST stessa. Il valore restituito può quindi essere utilizzato nella regola esterno come argomento per il costruttore, e così via. In modo che la struttura sia bottom-up costruito automaticamente per voi!

IOW, si costruisce la struttura finale, allo stesso tempo che l'AST è costruito (l'AST è costruita solo per garantire le regole di sintassi, e può essere gettato via.) Questo approccio è molto solido, ed è anche più veloce di prima la costruzione della AST, e poi trasformando quello! Ma utilizza ancora il potere del parser AST (al contrario di semplicemente utilizzando il normale Parser / Lexer da solo). E se avete bisogno l'AST, troppo -. Basta salvare da qualche parte

Se invece si vuole camminare un AST finita - Immagino è possibile utilizzare qualsiasi routine programmatica per farlo - Basta fare in modo, che funziona basso verso l'alto per costruire il vostro risultato

!

Spero che questo aiuti in qualche modo!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top