数日前、私はブログ エントリ ( http://ayende.com/Blog/archive/2008/09/08/Implementing-generic-natural-language-DSL.aspx ) を読みました。 .NET を使用した一般的な自然言語 DSL パーサー。
私の意見では、彼のアイデアの素晴らしい部分は、テキストが解析され、文と同じ名前を使用するクラスと照合されることです。
例として、次の行を取り上げます。
電子メール test@email.com とパスワード test でユーザー user1 を作成します user1 にログイン user1 を T シャツのカテゴリに移動します user1 にアイテムをカートに追加させる user1 をチェックアウトに連れて行く
解析の結果を取得する「既知の」オブジェクトのコレクションを使用して変換されます。オブジェクトの例は次のとおりです (私の例では Java を使用しています)。
public class CreateUser {
private final String user;
private String email;
private String password;
public CreateUser(String user) {
this.user = user;
}
public void withEmail(String email) {
this.email = email;
}
public String andPassword(String password) {
this.password = password;
}
}
したがって、最初の文を処理するとき、CreateUser クラスは一致し (明らかに「ユーザーの作成」の連結であるため)、コンストラクターでパラメーターを受け取るため、パーサーはユーザー パラメーターとして「user1」を受け取ります。
その後、パーサーは次の部分「with email」もメソッド名と一致することを識別し、そのメソッドはパラメーターを受け取るため、「test@email.com」を email パラメーターとして解析します。
もうお分かりだと思いますよね?少なくとも私にとっては、アプリケーション テスターが自然言語で「テスト スクリプト」を作成し、その文を JUnit を使用してアプリの動作をチェックするクラスに解析できるようにするという非常に明確なアプリケーションの 1 つです。
Java を使用してそのようなパーサーをコーディングできるツールまたはリソースに関するアイデア、ヒント、意見を聞きたいです。複雑な字句解析器や ANTLR のようなフレームワークの使用を避けることができればなおさらです。これはハエを殺すためにハンマーを使用することになると思います。
それ以上に、そのためのオープンソース プロジェクトを開始する人がいれば、私は間違いなく興味があります。