Mentre lavoravo con i macro, ho raggiunto il punto (ho cercato di evitarlo) dove ho bisogno di aggiornare quei nodi nell'AST che mantengono determinate condizioni. Per esempio, diciamo che vorrei aggiornare ogni nodo:Qual è il modo più semplice per aggiornare un AST immutabile?
Literal(Constant(1))
con il valore:
Literal(Constant(2))
quei nodi AST potrebbe essere ovunque nel albero di espressione, quindi non posso usare un ad-hoc pattern matcher. Ovviamente, l'ultima cosa che vorrei fare è codificare un pattern matcher completo che sia in grado di coprire tutti i primitivi del compilatore. Ho cercato nel API ma ho l'impressione che metodi come raccolgono e traversabili della famiglia non siano sufficienti per soddisfare i miei bisogni, poiché trattano l'albero come una cosa lineare, e voglio che il tutto sia aggiornato come risultato Quindi, è possibile aggiornare un albero di espressione immutabile in modo intelligente? Perché non esiste un'operazione di "aggiornamento" nell'API standard?
per plugin c'è un TreeTransformer. Suppongo che ci debba essere un simile per macro, forse anche lo stesso. – pedrofurla
Probabilmente vorrai controllare [zippers] (http://anti-xml.org/zippers.html) –
@NikitaVolkov, direi che se non lo stava chiedendo nel contesto dei macro. – pedrofurla