檔案中宣告的全域變數及其說明 - benchen2001/matiec GitHub Wiki

根據您提供的 iec_bison.yy 檔案內容,以下是在該檔案中宣告的全域變數及其說明:

  1. int parser_scan_count; (行 78)

    • 說明: 用於記錄解析器掃描的次數。註解提到 "will be 2 if pre-parsing is enabled",表示如果啟用了預解析功能,這個值會是 2。
  2. extern bool allow_function_overloading; (行 178)

    • 說明: 一個全域旗標,用於告知解析器是否允許函數重載。IEC 61131-3 標準允許標準庫中的函數重載,但不允許使用者程式碼中的重載。
  3. extern bool allow_extensible_function_parameters; (行 186)

    • 說明: 一個旗標,用於告知編譯器是否允許宣告可擴展的函數(即可變數量輸入參數的函數,例如 AND(word#33, word#44, word#55, word#66))。這是對標準語法的擴充。
  4. extern bool allow_ref_dereferencing; (行 191)

    • 說明: 一個全域旗標,用於告知解析器是否允許使用 DREF^ 運算符(定義於 IEC 61131-3 v3)。
  5. extern bool allow_ref_to_any; (行 194)

    • 說明: 一個全域旗標,用於告知解析器是否允許使用 REF_TO ANY 資料類型(非標準的 IEC 61131-3 v3 擴充)。
  6. extern bool allow_ref_to_in_derived_datatypes; (行 197)

    • 說明: 一個全域旗標,用於告知解析器是否允許在結構或陣列元素中使用 REF_TO(非標準擴充)。
  7. extern symbol_c *tree_root; (行 200)

    • 說明: 一個指向由 Bison 生成的語法解析樹根節點的指標。

注意: 這些變數被宣告為 extern,表示它們的實際定義(記憶體分配)通常在其他地方,或者在同一個檔案的末尾部分(Epilogue)。註解提到,由於 Bison 版本的問題,這些變數不能直接在此處定義,以避免連結時的多重定義錯誤。它們的作用類似於傳遞給 yyparse() 函數的參數,但由於 yyparse() 是自動生成的,無法直接添加參數,因此使用了全域變數。