3

私は、期待される要件を満たすために組み込み DSL を必要とするプロジェクトに取り組んでいます。

DSL は、ユーザー定義のイベント ベースになります。目的の構文のモックアップを次に示します。

user-defined-event-1 {
    // event body
}

user-defined-event-2 {
    // event body
}

おそらく、イベントに基づいて私が知っている最も類似した言語はLSL (Second Life から)です。

したがって、SO に関する他の同様の質問を読んだ後、この DSL を作成できる C++ (私は Qt で作業しています) に最適な埋め込み可能なスクリプト エンジン (Ruby、Lua、Python など) を求めたいと思います。

私のプロジェクトでは、スクリプトが DSL 構文 (少なくとも 1 つのイベントが定義されている) を適切に使用していることをテストし、基礎となるスクリプト エンジンと、可能であれば Qt のすべての機能をユーザーに提供します。

組み込み言語が Qt で動作することは必須ではありません。分離することもできますが、統合もあるとよいでしょう。

4

8 に答える 8

3

少なくともいくつかQt-Lua バインディングがあります。Lua は、上で示した構文をある程度実行できます。具体的に{}は、Lua のテーブル (連想配列) を示します。無名テーブルのみを関数に渡す場合は、かっこは必要ありません。

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> function LengthOfTable(t) print(#t) end
> LengthOfTable ({"a","b","c"})
3
> LengthOfTable {"a","b","c"}
3

もちろん、 Lua が実際にアプリケーションに最適かどうかは、アプリケーションによって異なります。いずれにせよ、Lua は C または C++ に組み込むのが非常に簡単です (IMO)。

于 2009-10-19T21:03:36.153 に答える
1

C ++で記述されたGoogleのV8プロジェクトを通じて、埋め込み可能なJavaScriptを見ることができます。

http://code.google.com/apis/v8/intro.html

于 2009-10-19T21:11:42.450 に答える
1

Qt にはQtScriptスクリプト モジュールが付属しています。ECMAScript ベースの言語 (javascript など) を使用します。

于 2009-10-19T21:22:00.687 に答える
1

Tcl は、提案された構文にかなり近づきます。

proc user-defined-event-1 {} {
# event body
puts "Hello World"
}

proc はプロシージャを定義し、追加の {} 中括弧は引数に使用されます。Tcl シェルでは、プロシージャを行ごとに動的に入力したり、コピーして貼り付けたり、ファイルからロードしたりできます。また、再ロードするだけで再定義することもできます。

于 2009-10-19T23:09:48.427 に答える
0

boost::pythonの実装は非常に簡単だと思います。python-Qtソリューションもいくつかあると聞きました。

于 2009-10-19T21:09:15.077 に答える
0

一般的な DSL を選択するには、非常に具体的な要件があるようです。既存の組み込み言語ではなく、一般的な DSL ライブラリ (例: Boost.Proto ) を試してみることをお勧めします。

于 2009-10-19T21:17:20.900 に答える
0

アプリ内に DSL を埋め込むには、ANTLRをお勧めします。私は何年にもわたって ANTLR を使用してきましたが、最新のものは Cassandra の JDBC ドライバー内にあります。C++ ランタイムを備えたバージョン 4 を試すことをお勧めします。バージョン 3 では、キーワード emit との衝突で Qt に問題がありました。

于 2013-05-01T07:09:11.793 に答える
0

試したことはありませんが、PyQtがあります。

于 2009-10-19T21:05:09.317 に答える