s rappresentazione delle espressioni per c

5

Sperimentando con vari lisps ultimamente (specialmente il clojure) mi sono chiesto se ci sono delle rappresentazioni basate su espressioni s di (sottoinsiemi) di c, quindi potresti utilizzare lisp / closure per scrivere macro e quindi convertire l'albero s di sespressione in puro c.

Non sto chiedendo un to-c-compilatore di lisp / scheme / clojure ma più di usare il lisps per trasformare un albero di sintassi c.

Poco sfondo del perché pongo questa domanda: mi trovo a godere di alcuni macro di clojure come le macro di threading -> doto ecc. E credo che sarebbero grandi anche in un ambiente non FP.

    
posta wirrbel 29.06.2013 - 09:35
fonte

1 risposta

2

È possibile ottenere questo da qualsiasi rappresentazione AST di un programma C. Basta camminare sull'albero e scaricarlo come un'espressione S. Tutto ciò di cui hai bisogno ora è un buon parser C che costruirà un AST.

Capisco che puoi piegare GNU per farlo. Non so come.

Esistono strumenti in grado di esportare le versioni XML di AST, che sono banalmente equivalenti alle espressioni S. Il nostro software DMS Reengineering Toolkit è uno di questi. Può anche conservare alcune delle direttive del preprocessore. Non una copia di C, ma un dump di Java che fa esattamente la stessa cosa può essere trovato qui .

Quello che troverete un po 'più difficile è rigenerare il testo sorgente valido dall'albero. Se non puoi farlo, fare trasformazioni sull'albero sembra inutile.

Volevi fare questo per applicare le trasformazioni al codice C. Sì, si può fare relativamente con le operazioni ad albero in Lisp relativamente facilmente. Ma hai il codice di quelle trasformazioni in lisp. DMS fornisce la capacità di eseguire trasformazioni, usando la sintassi di superficie del linguaggio (ad esempio, trasfazioni scritte usando la sintassi C per i pattern). Ciò li rende generalmente più facili da scrivere, perché la sintassi della superficie non deve conoscere i dettagli microscopici dell'AST. (DMS ha anche un built-in prettyprinting degli alberi).

    
risposta data 07.10.2013 - 06:48
fonte

Leggi altre domande sui tag