問題タブ [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.

0 投票する
7 に答える
105003 参照

c# - 文字列を同等のLINQ式ツリーに変換する方法は?

これは、元の問題の単純化されたバージョンです。

Person というクラスがあります。

...そしてインスタンスを言ってみましょう:

愛用のテキストエディタで以下を文字列として書きたいと思います....

この文字列とオブジェクト インスタンスを取得し、TRUE または FALSE を評価します。つまり、オブジェクト インスタンスで Func<Person, bool> を評価します。

ここに私の現在の考えがあります:

  1. 基本的な比較演算子と論理演算子をサポートするために、ANTLR に基本的な文法を実装します。Visual Basic の優先順位といくつかの機能セットをここにコピーすることを考えています: http://msdn.microsoft.com/en-us/library/fw84t893(VS.80).aspx
  2. ANTLR に、提供された文字列から適切な AST を作成させます。
  3. AST をウォークし、Predicate Builderフレームワークを使用して Func<Person, bool> を動的に作成します。
  4. 必要に応じて Person のインスタンスに対して述語を評価する

私の質問は、これを完全に焼き過ぎたのでしょうか? 代替案はありますか?


編集:選択されたソリューション

私はダイナミック Linq ライブラリ、具体的には LINQSamples で提供されているダイナミック クエリ クラスを使用することにしました。

以下のコード:

結果は System.Boolean 型で、このインスタンスでは TRUE です。

マーク・グラベルに感謝します。

System.Linq.Dynamic nugetパッケージを含めます。ドキュメントはこちら

0 投票する
3 に答える
399 参照

ruby - DSL のブロックとステートメントの翻訳

いくつかのステートメントと式を別の言語に翻訳する単純な Ruby DSL を作成したいと考えています。基本的な例は次のとおりです。

ここで、t は Ruby 変数ではないため、ブロックは Ruby によって評価できません (また、評価してはなりません!)。したがって、私の最善の策は、解析出力 (または AST) を使用して自分で翻訳を行うことです。そのために、ParseTree と ruby​​2ruby を使用できます。ただし、使用したい他の構成要素があります。たとえば、次のようになります。

ここでは、ローカル変数があり、翻訳を行うためにその値を取得する必要があります。ただし、ブロック評価を行う関数では、呼び出しブロックのローカル変数にアクセスできません。それがグローバル変数 ($x) である場合、その名前が global_variables 配列に存在するかどうかを確認でき、最悪の場合は eval を使用できますが、可能であれば、ローカル変数に対してどのように行うことができますか?

アップデート:

物事を片付けるためだけに。最初に言ったように、ブロックに対応する AST (to_sexp を使用) を取得するために ruby​​2ruby (したがって ParseTree) を使用しています。しかし、ブロック内でローカル変数を使用すると、次のような問題が発生します。

したがって、変数の値をその名前から文字列/シンボルとして取得する必要があります。また、式全体を別の言語または構文 (RPN など) に翻訳したいので、method_missing または instance_eval を使用できません。

それでも、Ruby 1.9 では完全にサポートされていないため、ParseTree に基づかない別のソリューションを歓迎します。

0 投票する
5 に答える
1947 参照

.net - .NETでDSLを構築するためのツール

私はDSLの開発にますますからかわれています。私はfslexとfsyaccを使用してF#で小さなものを開発しましたが、エラーメッセージは不正確です(より良いものを生成する方法も見つかりません。エラーケースの処理方法に関するドキュメントはほとんどないようです)。 UNICODE文字列を適切に解析しません。私には受け入れられません。簡単に言えば、DSLの開発を非常に簡単にするツールを探しています(そのためのVisual Studioツールは、私が求めているものとはまったく異なります)。構文解析/AST生成の部分に最も興味があります。私はANTLRを見てきましたが、コードと文法定義のメタ言語を混同しているのは私には悪いように見えるので、それや同様の問題に苦しんでいる解決策を回答に記載しないでください。また、私はそこで見ました」s Booという名前の言語のためのいくつかのものですが、私は今のところさらに別の言語をいじることには本当に興味がないので(特にサポートがほとんどない場合)、どちらにも当てはまりません。適切に文書化されていて、.NETで正常に機能し、動的に型指定された言語の使用やDLRの使用を伴わない限り、他の提案はありがたいです。

0 投票する
5 に答える
2925 参照

.net - DSL フレームワークの選択

DSL を定義する必要があるプロジェクトに取り組んでいます。私のプロジェクトにとって適切な DSL を考え出すことは非常に重要であるため、DSL の定義、解析、およびコード生成 (.NET ベースの言語でなければならない) に役立つ既存のフレームワークを評価することにしました。検討したフレームワークは次のとおりです。

  1. DSL を定義するのに理想的な、カスタマイズ可能なコンパイラと pythonish 構文を備えた Boo 言語。
  2. 拡張可能なコマンドレットをサポートする Windows PowerShell。
  3. ビジュアル モデリングをサポートする Microsoft DSL ツールですが、柔軟性は低くなります (私の意見では)。
  4. 実績のあるツールであるANTLR
  5. C# 流暢なインターフェイス (これにはあまり満足していません)
  6. Oslo フレームワーク (本番環境で使用するには成熟していますか?)

上記のフレームワークにはそれぞれ長所と短所があり、私は決定を下すことができません.上記のフレームワークから選択する場合、どれを選択しますか?

私が見逃したかもしれないほど基本的なフレームワークは他にありますか?

ヘルプやガイダンスをいただければ幸いです。

0 投票する
4 に答える
236 参照

programming-languages - 時間計算用の DSL が必要です

「月の最終営業日から 2 営業日後」のような概念を理解できる時間計算用の DSL を知っている人はいますか?

パーサーを書くことは気にしませんが、言語自体については助けが必要です。

0 投票する
6 に答える
8181 参照

ruby - Ruby DSL (ドメイン固有言語) リポジトリ、例

Ruby DSL (ドメイン固有言語) の優れた例を探しています。あなたが知っている、読む価値のあるリポジトリやプロジェクトはどれですか? なぜそれは (または: 彼らは) 素晴らしい例ですか?

私は、よく考え抜かれて設計された、より複雑な例に特に興味があります。

0 投票する
3 に答える
958 参照

c# - .NET ベースの CSS 抽象化ライブラリはありますか?

私はほぼ 2 年間、非常に大規模なプロジェクトに取り組んできましたが、クライアントの要件は常に変化しています。もちろん、これらの変更はすべてに影響を与えるので、より動的な方法で CSS を操作する方法を見つけたいと考えています。

ruby または python CSS DSL のいずれかを ironRuby/Python で実行できると思いますが、このクライアントはインストールされているソフトウェア/フレームワークに非常にこだわっています。

基本プログラミング言語が vb または c# である CSS DSL は見つかりませんでした。

参照: http://sandbox.pocoo.org/clevercss/およびhttp://nubyonrails.com/articles/dynamic-css

0 投票する
4 に答える
1546 参照

sql - SQL の代替を設計していますか?

私は独自の SQL に相当するもの (DDL+DML) を設計および実装することを考えています...

  1. 純粋なリレーショナル代数言語、および
  2. 洗練された Lisp/Scheme ライクな構文を持つ

MySQL などの RDBMS を想定すると、言語設計作業をどこから開始する必要があるでしょうか? InnoDB などのストレージ エンジン層の上に?

すべての RDBMS 機能が一般的にストレージ エンジンの上にあることを知りませんか? 私の現在の直感的な理解では、RDBMS (MySQL など) を作成するために必要な作業の大部分は、ストレージ エンジン内 (具体的には InnoDB) で既に行われており、必要なのはラッパー言語を作成することだけです。それ。しかし、それが本当なら、そもそもなぜ MySQL が存在するのだろうということも知っています!

0 投票する
2 に答える
322 参照

ruby-on-rails - Ruby を始めるには?Ruby を使用するにはどうすればよいですか? それは何で有名ですか?DSL はどのように役立つのでしょうか?

優れた学習リソースにはどのようなものがありますか? Ruby でどのような問題を解決できますか? ruby on rails を学ぶことは ruby​​ と同じですか? 私の現在のバックグラウンドがビジュアル スタジオと microsoft.net フレームワークである場合、IronRuby が最適な方法ですか?

非常に多くの質問、提案してください。