2017-02-12 1 views
0

多くのテキストファイルの代わりにデータベースにコンピュータプログラムを保存したいと思います。それには、プログラムの構造、すべてのオブジェクト、メソッド、依存関係などが含まれている必要があります。私はデータベースに特定の言語を格納するのではなく、ある種の "メタ"プログラミング言語を格納することを望んでいます。 2番目のステップでは、データベース内のこの構造を古典的な言語(C#、Javaなど)のソースコードに変換/エクスポートしたり、CLR/JVM用に直接コンパイルしたりしたいと考えています。"meta"ソースコードをデータベースに保存する方法

私はこのアイデアの最初の人ではないと思います。私はインターネットを検索し、私が探しているのは "データベース(SCID)のソースコード"と呼ばれていると思います。残念ながら、私はこの考え方の実装を見つけることができませんでした。

だから私の質問は以下のとおりです。

は、データベースの内部で「メタ」のプログラムコードを格納し、実行/コンパイルすることができ、それから、伝統的なテキストのソースコードを生成してみましょう任意のプログラムはありますか?

ショート発言:
- それはまたのNoSQLデータベース
することができます - 私は現在のプログラムのインポート方法/あなたはいくつかの種類を探しているようですねデータベース

+0

Neo4jは、Graph Database内の抽象構文木をモデル化する方法であるかもしれません。 – ldz

答えて

0

に入力された気にしません各ターゲット言語の共通セマンティクスを適切に記述する一般的なマークアップ言語の例

これは、データベースに格納することについてはあまりありませんが、後で解析して評価することができる単一の(想像できる、XMLのような)構造を持つことについてはあまりありません。ターゲット言語を使用して、ネイティブソース/バイトコードを生成します。そのようなことがあった場合、それをデータベースに格納するのは簡単ではありません - それは難しいことではありません。キー/バリューデータベースでさえそれを処理できます。

難しい部分は、複数の言語のニュアンスを抽象化し、それらを共通の形式で記述しようとするものを見つけることになります。

Similar questionsは、解決策を満足させることなく既に尋ねられています。

完全なソースは必要ないかもしれないが、ランタイムデータの説明だけでなく、XMLやJSONなどの形式は、この目的のためのものであり、解析できるオブジェクトの簡単な説明を提供します。そのデータを動的に解析することによってソースコードが構築され、ネイティブの同等物にマッピングされます。

は、特定の言語でさらに進むことができます。たとえば、選択した言語がバイトコードに変換される場合、技術的にはバイナリバイトコードをBLOBに格納してから直接実行することができます。リフレクションと動的評価を提供する言語はおそらくこれを処理できます。あなたのDBはコンパイル時にそのデータを格納し、それを実行する前に取得するラッパーです。それはあなたの目標言語とコンパイルの処理方法に依存します。

もちろん、翻訳された言語で作業している場合は、完全なソースとeval(目的の言語が好きな方法で)を保存するだけです。

あなたが意図したユースケースについてもっと詳しく知っていれば、私はあなたがソースコードBabelfishを発明しなくてもそれをどう扱うべきかについてちょっとしたアドバイスを得るだろうと確信しています。

+0

あなたの答えをありがとう!私はあなたが正しいと思うのは、データベースに格納することは、XMLやそのような形式で構造を格納する方法がある場合は問題ではありません。 私は、他の言語にも有効な構造に合致するのに問題があるかもしれない問題を解決するために、すべての言語に独自の特別な方法があることを理解します。最初は、ほとんどの言語が共通する概念を保存したいと思います。 私の主な考えは、LabViewのようなビジュアル言語を作成することです。しかし、私はちょうどそれがどれくらいの作業であり、どのパーツがすでに利用可能であるかを見積もりたいだけです。 –

+0

私は想像していました。ある言語用のASTを構築しても、概念を別の言語に移植するのは難しいでしょう。たとえば、命令型のコードをどのように機能的な言語に効率的に移植しますか?ユーザーがコード概念をドラッグ・アンド・ドロップして実行できるGUIを提供したい場合は、1つの言語を選択し、ラベルとデータを使用して既製のルーチンを呼び出すJSON /不可知論的なデータ構造を作成するだけでよい。また、ランタイムエンジンを言語の上に埋め込み、何らかのコード生成を行うこともできます。あなたが提供している市場とその複雑さがどの程度複雑であるかによって異なります。 –

関連する問題