複雑な固定長および可変長の文字列を作成する必要があります。これらの文字列は、顧客プロファイル、注文などを表している可能性があります。どの JVM ベースのプログラミング言語をお勧めしますか?
アイデアは、エンド ユーザーがこの DSL を使用して文字列を作成することです。だから私は検証、コード補完などを探しています.
複雑な固定長および可変長の文字列を作成する必要があります。これらの文字列は、顧客プロファイル、注文などを表している可能性があります。どの JVM ベースのプログラミング言語をお勧めしますか?
アイデアは、エンド ユーザーがこの DSL を使用して文字列を作成することです。だから私は検証、コード補完などを探しています.
JVM 上で動作する Lisp を使用します。あなたが持っているいくつかの選択肢:
Lisp を使用してソフトウェアをボトムアップで設計する方法、つまり、目の前の問題を解決するのに理想的な言語に Lispを成長させる方法を説明している無料の良い本があります。
Forthファミリーの言語は、DSL の定義にも最適です。JVM で実行されるものはいくつかあります。
DSLには2つのタイプがあります。外部および埋め込み。
外部DSLは、ホスト言語から完全に分離されています。つまり、言語外で記述しますが、通常、ホスト言語でコードを生成するために使用されます。このアプローチでは、単純な文法ファイルが新しいDSL用の完全なEclipseベースのエディターを生成し、XPandのコードテンプレートを使用して実際のJavaコードを生成できるため、XTextとXPandがおそらく最適なツールです。XTendとXPandはJavaで記述されていますが、プロセスの最後にJavaコードが含まれている限り、何でも記述できるため、これは偶発的なものです。このアプローチの欠点は、かなり複雑な問題の場合、言語が非常に複雑になり、文法やコード生成テンプレートでさらに多くの作業が必要になることです。あなたはできる' 式の評価などのホスト言語機能を使用するため、必要に応じてDSLでこれらすべてを再構築する必要があります。XTextには、ここで役立つ式を含む部分言語であるXBaseがまもなく含まれる予定です。
もう1つのアプローチは、関数型言語で通常見られる高次構造(HOFやモナドなど)またはマクロ(Lispなど)などのメタプログラミング機能を使用して、ホスト言語で高レベルドメイン機能を表現する組み込みDSLです。Javaにはこれらのどちらもありませんので、DSL作業(または他のほとんどの形式の抽象プログラミング)には適していません。Spring Rooは、生成を使用するJava用のメタプログラミングタイプの機能を提供しているため、オプションになる可能性があります。それができない場合、Scalaはおそらく最も人気のあるJavaのようなJVM言語であり、必要な機能を備えています。
組み込みDSLは通常、外部DSLよりもはるかに簡単です。これは、ホスト言語を完全にサポートしているため、Scalaを試すことをお勧めします。
どこまでもスカラ!Scala は内部 DSL に特に適しています (詳細はこちらを参照してください)。
Xtext ( http://www.eclipse.org/Xtext/ ) を使用すると、DSL を指定するときに便利なエディターを無料で入手できます。
そのためにはGroovyをお勧めします。
私はjrubyをお勧めします。私はいくつかのことをしてきましたが、私が望むものを手に入れるのはいつもとても簡単でした.
Apache Velocity テンプレート エンジンの問題のようです。必要に応じて、テンプレート構文または DSL を備えた Java ライブラリです。