0

だから私は自分の言語をCUDA言語に翻訳するコンパイラをJavaで書いています。このタスクのために、私は ANTLR4 で文法を書き、レクサーとパーサーを取得しました。

現在、ANTLR は、基本的に抽象解析ツリーのノードである実装可能なメソッドを備えたリスナーを提供します。次に、このノードのトークンに基づいて、生成したいコードでこのツリーを装飾します。

私の問題は、この CUDAEmitter クラスに 45 個のメソッドがあり、830 行のコードがあることです。これらのメソッドをどのように構造化して分割するかを理解するのに苦労しています。これらの 3 つを使用してノードを装飾します。

private final ParseTreeProperty<String> cuda = new ParseTreeProperty<String>();
String getCode(ParseTree ctx) { return cuda.get(ctx); }
void setCode(ParseTree ctx, String s) { cuda.put(ctx, s); }

コード生成の例:

public void exitIdvalString(ParmaParser.IdvalStringContext ctx) {
 String str = ctx.STRING().getText();
 setCode(ctx, str);     
}

このクラスを分割するにはどうすればよいですか? 御時間ありがとうございます!

4

1 に答える 1

0

これが最善の解決策であるかどうかは疑わしいですが、GenPackageは 1 つのアプローチです。ノードとサポート クラスの自動生成を行います。ジェネレーターはいつでも再実行して、不足しているクラスを埋めることができます。私は他の一般的に実装されたソリューションを見たことがありません。

完全な開示: 私は GenPackage の作成者です。基本的なアプローチに関心がある場合は、シンボル テーブルのサポートといくつかの追加機能を追加する未解決のコミットがあります。

于 2013-05-23T07:15:03.683 に答える