2

Java で AST にアクセスして変更する最先端の方法は何ですか? 廃止されたコードがたくさんある古い例しか見つかりませんでした。私はいくつかの説明を見つけましたが、antlr のようなツールがこの概念全体にどのように関与するかについても不明確な見解を持っています。AST をゼロから作成するのではなく、既存のプログラムを解析することを追加する必要があるかもしれません。

この AST でやりたいことは、ルール エンジンのビジネス ルールを簡単に抽出できるように変換することです。多分あなたはその考えに良いアプローチを持っています。

4

1 に答える 1

3

Java コミュニティーが主に使用しているのは、Eclipse AST インターフェース (または Java コンパイラーによって提供される AST へのアクセス) のようなものだと思います。これは基本的にツリー ノードであり、ノード タイプをテストしてツリーを上下に移動するための多くの手続き型計算です。私はそれが一般的に「最先端」であるとは思わない。Eclipse は、識別子が定義にどのように関連付けられているか (「名前解決」) に関する情報を提供していると思います。

ANTLR パーサーは、AST の構築に役立ちます。ANTLR 用の完全な Java フロントが既にあると確信しています。サイトを確認してください。ツリー ウォーキングは Eclipse AST と同じだと思います。ANTLR のフロント エンドが名前解決を提供するとは思わない。

より優れたスキームには、ツリー ノード全体のデータフロー計算を使用してアナライザーを構築できる属性文法が含まれます。Java 実装はSilverJastAddにあります。これらは、Java コミュニティーではあまり知られていないようです。JastAdd は、名前解決とデータ フロー情報へのアクセスを提供します。どちらも興味深いコード分析を行うために必要です。

パターン指向スキームはさらに優れています。関心のある構文フラグメントと対応するアクションを記述します。(属性文法は、単一のツリー ノードに限定されたパターン指向スキームのようなものです。パターン指向スキームは、構造を個人的に知る必要のないツリー ノードのセットで動作します)。 Stratego、DMS、TXL などのプログラム変換システム (PTS) がこれらを提供します。ただし、これらはいずれもJavaでコーディングされていません。Stratego と TXL には完全な Java 文法とツリーが用意されていると確信していますが、それ以上のものはありません。DMS は、Java を含むさまざまな言語に対して、属性文法、名前解決、フロー分析、パターンを使用したツリーの書き換え、さらにはデータ フロー ベースのパターン マッチャーを提供します。

「ビジネス ルールの抽出」をサポートするには、できるだけ多くの分析情報が必要です。それが簡単だと思うなら、あなたは失礼な驚きに直面しています. コード分​​析機能は必要条件ですが、ビジネス ルールを認識するためには、関心のあるビジネス用語とアクション、およびそれらがコードにどのようにマッピングされるかについて、システムの外部からの知識が必要です。コードにはその情報は含まれていません。

編集:コメントでの議論に基づいて、OPは半自動化されたプロセスを提案し、人がこの追加の知識をプロセスにもたらすことを暗示しています。必要であることに大賛成です。彼は、ビジネス ルールの抽出に関するこのプレゼンテーションが、その理由と、そのために何ができるかを理解するのに役立つと思うかもしれません。

于 2013-10-15T12:30:42.223 に答える