我試圖創建一個包含所有函數名稱的地圖。我可以在掃描階段或解析階段執行此操作,但似乎無法獲得可供兩者訪問的相同變量。Javacc我如何使一個變量可以訪問掃描儀和分析器
我需要的是在開始解析之前將所有函數名保存在地圖中,因爲函數可以在被調用的地方之下聲明。所以我需要檢查該函數是否存在。
我嘗試過使用令牌管理器聲明,它允許我在每次看到地圖時向地圖添加令牌。但後來我需要funcs變量才能被解析器看到,因此它可以檢查函數是否存在。
TOKEN_MGR_DECLS : {
public static Map funcs = new HashMap();
}
TOKEN : {
<FNAME: (["A"-"Z"])+ > { funcs.put(matchedToken.image, "..");}
}
這是我得到的最接近,我試圖在文件的.jj一個全局變量,僅低於PARSER_BEGIN(..),並宣佈它的主要功能之內。當嘗試向地圖添加函數名稱時,這兩者都會導致出現「符號無法找到」錯誤。
感謝您的任何幫助。
請記住,掃描和解析是在同一遍中完成的。 –