すべての関数名を含むマップを作成しようとしています。私はスキャンフェーズや解析フェーズでこれを行うことができますが、両方にアクセスできるように同じ変数を得ることはできません。Javaccスキャナとパーサーが変数にアクセスできるようにする方法
私が必要とするのは、関数が呼び出されたポイントの下で宣言できるため、すべての関数名を解析する前にマップに保存することです。だから私はその機能が存在することを確認する必要があります。
トークンmgr宣言を使用してみましたが、トークンを表示するたびにマップにトークンを追加できました。しかし、関数が存在するかどうかを調べるためには、パーサーが見るためにfuncs変数が必要です。
TOKEN_MGR_DECLS : {
public static Map funcs = new HashMap();
}
TOKEN : {
<FNAME: (["A"-"Z"])+ > { funcs.put(matchedToken.image, "..");}
}
これは私が持っている最も近いですが、私はちょうどPARSER_BEGIN(..)の下に、.jjファイルでグローバル変数を試みたが、メイン関数内でそれを宣言しました。関数名をマップに追加しようとすると、両方とも 'シンボルが見つかりません'というエラーにつながります。
ありがとうございました。
スキャンと解析は同じパスで行われます。 –