web-dev-qa-db-ja.com

sの式表現c

最近さまざまなlispsを試して(特にclojure)、cの(サブセット)のs式ベースの表現があるかどうか疑問に思ったので、LISP /クロージャーを使用してマクロを記述し、s-expression cツリーを純粋なcに変換できます。

私はLISP/scheme/clojureのto-cコンパイラーを求めているのではなく、lispsを使用してc構文ツリーを変換することを求めています。

なぜ私がこの質問をしているのかについての小さな背景:スレッドマクロのような特定のclojureマクロを本当に楽しんでいることがわかります->dotoなど。また、FP以外の環境でも同様に優れていると思います。

6
wirrbel

これは、CプログラムのすべてのAST=表現から取得できます。ツリーを歩いてS式としてダンプするだけです。今必要なのは、ASTを構築する優れたCパーサーだけです。

GNU=曲げることができると思います。方法はわかりません。

ASTのXMLバージョンをエクスポートできるツールがあります。これは、S式と自明に同等です。 DMSソフトウェアリエンジニアリングツールキットは、これらの1つです。一部のプリプロセッサディレクティブを保持することもできます。 Cのダンプではなく、Javaまったく同じことを行う ここにあります のダンプです。

少し難しいのは、ツリーから有効なソーステキストを再生成することです。それができない場合は、ツリーを変換しても意味がありません。

Cコードに変換を適用するためにこれを実行したいと考えていました。はい、LISPのツリー操作で比較的簡単に行うことができます。しかし、LISPでこれらの変換をコーディングします。 DMSは、言語の表面構文を使用して、変換を実行する機能を提供します(たとえば、パターンのC構文を使用して記述された変換)。表面の構文はASTの微視的な詳細を知る必要がないため、これにより一般的に記述が容易になります。 (DMSには、組み込みのツリーのプリティプリンティングもあります)。

2
Ira Baxter