問題タブ [dsl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - DSL: DSL ルールから C# 式へ
質問はおそらく複合的なものです。拡張させてください:
- .NET オブジェクトの public bool プロパティに基づいて AND/OR ベースのルールを作成するためのデザイナー(スタブ/フレームワーク/メタデザイナー)は存在しますか? 任意の DSL/Boo/... 出力として保存されます。
- DSL 出力を C#式にコンパイルすることは可能ですか?
私たちの主な問題は、ドキュメントとコードの間のギャップです。私たちの製品は何百ものユーザー定義ルールに基づいており、変更要求をスピードアップしたいと考えています。
シンプルなデザイナーをユーザーに提供し、出力を取得できれば、それを C#/IL コードに変換/コンパイルした後、変更要求サイクルを迅速に行うことができます。
私たちの問題は特定の問題であることはわかっていますが、「壁の中のレンガ」は大歓迎です!
例:
AC# クラス、対象:
デザイナーでは、作成できるはずです
- 任意のタイプのグラフィック デザイナー (つまり、パブリック プロパティを選択するためのドロップダウン)
DSL での出力:
C# での出力:
更新 #1
静的型の .NET クラスの使用をサポートする DSL 言語があればうれしいです。つまり、ユーザーがコードを確認できる場合 (例では「Output in DSL」 )、デザイナーは必要ありません。
アップデート #2
ティップをもとに表情木を見つめる。数日後、私は DLinq に出くわしました - 私は DLinq の大ファンではありませんでしたが、この場合、問題のドメインに非常によく適合します。
- 構文解析が容易(A > 2 AND B < 4) OR C = 5を式ツリーに
- そんな表現がしやすい
- シリアル化/逆シリアル化が非常に簡単
- FlowLayoutPanel に基づく GUI は「式ビルダー」として正常に動作します
visual-studio - 他のテンプレートを呼び出して既存のコードを保持するテキスト テンプレート
Visual Studio を使用して DSL からコードを生成し始めたばかりで、1 つのテンプレートを取得して複数のサブテンプレートを呼び出す方法のヘルプを探していました。
また、モデルに変更を加えたときに、追加されたコードを失うことなくコードを簡単に再生成できるマージ機能があるかどうかも疑問に思っていました。
parsing - 構成可能な文法
ミニ言語の組み込みをサポートするプログラミング言語は非常に多くあります。PHP は HTML に埋め込まれています。XML は JavaScript 内に埋め込むことができます。Linq は C# に組み込むことができます。Perl には正規表現を埋め込むことができます。
考えてみれば、ほとんどのプログラミング言語はさまざまなミニ言語としてモデル化できます。たとえば、Java は、少なくとも 4 つの異なるミニ言語に分割できます。
- 型宣言言語 (パッケージ ディレクティブ、インポート ディレクティブ、クラス宣言)
- メンバー宣言言語 (アクセス修飾子、メソッド宣言、メンバー変数)
- ステートメント言語 (制御フロー、順次実行)
- 式言語 (リテラル、代入、比較、算術)
これらの 4 つの概念言語を 4 つの異なる文法として実装できれば、複雑なパーサーやコンパイラの実装で通常見られるスパゲティ現象の多くを確実に減らすことができます。
私は以前にさまざまな種類の言語のパーサーを実装しました (ANTLR、JavaCC、およびカスタム再帰降下パーサーを使用)。言語が非常に大きく複雑になると、通常、1 つの huuuuuuge 文法になってしまい、パーサーの実装は次のようになります。本当に醜い、本当に速い。
理想的には、これらの言語のいずれかのパーサーを作成するときは、構成可能なパーサーのコレクションとして実装し、それらの間で制御をやり取りするのがよいでしょう。
注意が必要なことは、多くの場合、含まれる言語 (Perl など) が、含まれる言語 (正規表現など) の独自のターミナル センチネルを定義することです。良い例を次に示します。
このコードでは、メインの perl コードが非標準の終端 "|" を定義しています。正規表現用。正規表現パーサーは、親パーサーに相談しないと式の終端を見つける方法がわからないため、正規表現パーサーを perl パーサーとは完全に異なるものとして実装するのは非常に困難です。
または、Linq 式を含めることを許可する言語があったとしますが、(C# のように) セミコロンで終了する代わりに、Linq 式を角かっこ内に表示することを義務付けたいと思いました。
親言語の文法内で Linq 文法を定義した場合、構文の先読みを使用して括弧の囲みを見つける「LinqExpression」の明確な生成を簡単に作成できます。しかし、親の文法は、Linq 仕様全体を吸収する必要があります。そして、それはドラッグです。一方、別の子 Linq パーサーは、外部のトークン型の先読みを実装する必要があるため、停止する場所を見つけるのに非常に苦労します。
そして、Linq パーサーは親パーサーとはまったく異なる一連のトークン化ルールを定義するため、個別の字句解析/解析フェーズを使用することはほぼ除外されます。一度に 1 つのトークンをスキャンしている場合、親言語の字句解析器に制御を戻すタイミングをどのように知るのでしょうか?
皆さんはどう思いますか?より大きな親言語内にミニ言語を含めるために、明確で分離された構成可能な言語文法を実装するために、今日利用できる最良の手法は何ですか?
dsl - UIとDSLのどちらが適していますか?
動作が多数のXMLファイルによって定義されるシステムがあります(それぞれがサブシステムの動作を管理する約50の異なるXMLファイル)。
レガシーの理由によるXMLファイルはカスタム形式であり、システム内のさまざまなコンポーネントで簡単に使用できるようになっています。
カスタム形式は、人間にとって非常に直感的で読みやすいものではありません(これは私たちにとっても重要な考慮事項です)。
では、この読みやすさの問題にどのように取り組むのでしょうか。
これらのXMLファイルの上に書かれた直感的なUIがその役目を果たすべきだと思います。
ただし、私の同僚は、XMLファイルをDSLに置き換える方が、直感的で機械可読であるため、より良いアイデアだと感じています。
これは良い考えですか、それともやり過ぎですか?UIと比べるとDSLを正しくするのは非常に難しいと思います。しかし、私は間違っている可能性があります。
どんな助けでも大歓迎です。ありがとう。
ruby - Ruby DSL のどの部分を手動で作成する必要がありますか?
Ruby 1.9 または JRuby で DSL を構築したい場合、これらの段階のいずれかを手動で行う必要がありますか?
- レキシング
- 解釈
- 解析中
- ジャストインタイムのコンパイル
明らかに、私はプログラマーなので、できる限り実際のコードを書くのは好きではないので、これらのステップのどれも手作業を必要としないことを願っています :)
dsl - インターネット広告用の小さなカスタム DSL の例は?
私は DSL について学んでいて、それらを理解できる文脈に入れようとしています。
たとえば、インターネット広告について話しているとしましょう - それは私が取り組みたい分野なので - 構築できる小さなカスタム DSL の例は何ですか?
また、これを実装するために必要な高レベルの技術的手順は何ですか?
java - データベース行の数式 - Java
この要件は奇妙であるか、混乱しすぎている必要があります。30 列のルールテーブルがあります。フィード ファイルのすべての行は、フィードの種類に基づいて一部またはすべての条件と比較されます。ドメインは銀行で、アプリケーションはローン レポート用です (たとえば、有担保ローンと無担保ローンの合計額をレポートします)。
これは私の問題です:
私はこのような 5 つのシナリオ (カスタマイズ可能である必要があります) をユーザーが用意しています (たとえば、担保が現金/株式の場合は、現金担保/株式担保のみを検討してください)。
おそらく、このシナリオはさらに増えることが予想されます。この問題にどのようにアプローチすればよいかわかりません。私の計画は、ルールテーブルに列を作成し、フォーマット済みの簡単な英語の条件をいくつか入れて (これを文書化し、ユーザーに教えます)、正規表現を使用してそれらを解析し、後で数値に変換することです。私は DSL に関する知識も経験もありませんが、これが最高ですか??!! 私が考えられること。どんな助けも私にとって素晴らしい知識の源になります。ありがとう。アルン
project-management - ドメイン固有言語はいつ使用する必要がありますか?
どのような場合にドメイン固有言語を使用する必要があるかについて、実用的なガイダンスが欲しいです。長所と短所に関するリソースを見つけましたが、どのような種類のプロジェクトでその使用が正当化されますか?
DSL の作成と保守には多大な時間が費やされているように思われますが、時間の投資に対して生産性が得られるのはどのアプリケーション領域でしょうか?
編集: DSL の最も一般的な用途は、データ状態を永続化するためのファイル形式のようですが、プログラムのロジックと構造 (おそらくコード生成) に DSL を使用するのはどうですか? これはいつ実現可能ですか?
編集 #2私は主に、特定の DSL をいつ作成する価値があるかについて質問しています。もちろん、時間を節約するために、可能な限り既存の DSL を使用する必要があります。
visual-studio - VS2008 DSL のコンテキスト メニューにメニュー項目を追加する
私は現在、私が働いている会社のために双方向 DSL を作成しようとしています。図にコンテキスト メニューを追加して、ユーザーがコードのインポートを要求するメカニズムを提供したいと考えています。VS2005 ではこれを実現するために Commands.ctc ファイルが使用されており、2008 では Commands.ctc を使用しているようです。ただし、これがどのように機能するかを調べるのは簡単ではありません。
dsl - ドメイン固有言語の成功 ? どちらを使用しますか?
ドメイン固有言語の設計と実装に興味があります。私が知っている DSL の多くは、学界に由来します。
業界で実際に使われている DSL を教えてください。日常的に使うもの…とても便利です..
(私は宣言型言語にも興味がありますが、実際には xml ベースのものではありません...)...
業界で展開されている言語の(網羅的ではない)リストを作成したいと思います...これが膨大であることは知っています...
時々、私は汎用言語を使用して、DSL を使用して簡単に実行できることを実装しています。
EDIT 私は主にアプリケーション指向の DSL に興味があり、小さな組み込み言語には興味がありません。たとえば、SQL は探しているものと一致しますが、Java に埋め込まれた SQL には興味がありません。私が探している種類の言語の別の例は X# です