封鎖 >CodeGenerator

CodeGenerator 類別

此程式碼產生器的類別,可將區塊轉譯為語言。

Signature:

export declare class CodeGenerator 

建構函式

建構函式 修飾符 說明
(建構函式)(名稱) 建構 CodeGenerator 類別的新例項

屬性

屬性 修飾符 類型 說明
COMMENT_WRAP 數字 換行前註解的長度上限。不包括縮排。
definitions_ protected { [key: string]: string;} 要在程式碼之前顯示的字典。
forBlock Record<string, (block: Block, generator: this) =>[字串,數字] |字串 |空值>

區塊產生器函式的字典,按區塊類型鍵。每個區塊產生器函式都會使用兩個參數:

- 用來產生程式碼的區塊;以及-呼叫 CodeGenerator (或子類別) 實例,因此函式可以呼叫以下定義的方法 (例如 blockToCode) 或相關子類別 (例如 JavascripGenerator)。

然後傳回:

- [程式碼,優先順序] 元組 (用於值/運算式區塊),或 - 包含所產生程式碼的字串 (用於陳述式區塊) 或 - 空值 (如果沒有應針對區塊發出程式碼)。

FUNCTION_NAME_PLACEHOLDER_ 字串 這會在使用 CodeGenerator.ProvideFunction_ 定義的函式中當做預留位置使用。不得為可合法顯示在函式定義 (或註解) 中的法律程式碼,也不能混淆規則運算式剖析器。
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string;} 這個字典將定義中的函式名稱對應至實際函式名稱 (以避免使用者函式發生衝突)。
代謝 字串 縮排方法。預設值為兩個空格,但語言產生器可能會覆寫這個值,以便增加縮排或變更為分頁。
INFINITE_LOOP_TRAP 字串 |空值 插入到可能使無限迴圈位置的任意程式碼。「%1」的任何執行個體將會替換為失敗的區塊 ID例如: checkTimeout(%1);\n
isInitialized 布林值 |空值 是否呼叫了 init 方法。如果發電機在建立後將這個旗標設為 false,在 init 設為 true,則當產生器尚未初始化時,blockToCode 將發出警示。如果未變更這個標記,就不會有任何作用。
name_ 字串
nameDB_? 名稱 (選用) 變數和程序名稱的資料庫。
ORDER_OVERRIDES 數字 [][][] 不需要括號的外內部配對清單。
RESERVED_WORDS_ protected 字串 保留字詞清單 (以半形逗號分隔)。
STATEMENT_PREFIX 字串 |空值 在每個陳述式之前插入的任意程式碼。「%1」的任何執行個體就會替換為陳述式的區塊 ID。例如:highlight(%1);\n
STATEMENT_SUFFIX 字串 |空值 在每個陳述式之後插入的任意程式碼。「%1」的任何執行個體就會替換為陳述式的區塊 ID。例如:highlight(%1);\n

方法

方法 修飾符 說明
addLoopTrap(branch, block) 在迴圈內容中新增無限迴圈陷阱。在迴圈區塊的開頭 (在迴圈陳述式執行後) 加上陳述式後置字串,並在迴圈陳述式執行前加上陳述式前置字串。
addReservedWords(words) 將一或多個字詞新增至這個語言的保留字詞清單。
allNestedComments(block) 以遞迴方式自動尋覓一棵方塊,並傳回對方的所有註解。
blockToCode(block, opt_thisOnly) 為指定區塊 (及附加的區塊) 產生程式碼。產生器必須先初始化,才能呼叫這個函式。
finish(程式碼) 掛在程式碼生成結束時執行的程式碼。子類別可能會覆寫這項設定,例如:,在產生的程式碼前面加上匯入陳述式或變數定義。
getProcedureName(name) 取得使用者定義程序的專屬法定名稱。呼叫此方法前,類別的 nameDB_ 屬性必須已完成初始化。這通常是透過程式碼產生器類別的 init 函式完成。
getVariableName(nameOrId) 取得使用者定義變數的專屬法定名稱。呼叫此方法前,類別的 nameDB_ 屬性必須已完成初始化。這通常是透過程式碼產生器類別的 init 函式完成。
init(_workspace) 在開始產生程式碼之前安裝程式碼。子類別可能會覆寫這項設定,例如:初始化變數名稱的資料庫
injectId(msg, Block) 在訊息中插入區塊 ID 以取代「%1」。用於 STATEMENT_PREFIX、STATEMENT_SUFFIX 和 INFINITE_LOOP_TRAP。
prefixLines(text, prefix) 在每一行程式碼前面加上通用前置字元。適合使用縮排或新增註解標記。
ProvideFunction_(desiredName, 代碼)

定義要在產生的程式碼中納入的開發人員定義函式 (而非使用者定義程序)。用於建立私人輔助函式。初次使用指定的 actionName 呼叫此方法時,系統會儲存程式碼並產生實際名稱。後續呼叫同一個 goalName 的後續呼叫不會產生任何作用,但傳回值相同。

呼叫端應自行確認相同的 requiredName 並未用於不同的輔助函式 (例如,使用「colourRandom」和「listRandom」,而非「random」)。保留字詞、使用者定義的變數或程序名稱不會發生衝突。

呼叫 CodeGenerator.finish() 時,程式碼會取得輸出內容。

scrub_(_block, code, _opt_thisOnly) 從區塊產生程式碼的常見工作。系統會透過 blockToCode 呼叫,並呼叫每個區塊,而不只是頂層區塊。子類別可能會覆寫這項設定,例如:產生陳述式的程式碼,或是處理指定區塊和任何連結值區塊的註解。
scrubNakedValue(line) Nak 值是頂層區塊,其輸出內容並未插入任何內容。子類別可能會覆寫這項設定,例如:。
statementToCode(block, name) 產生程式碼字串,代表附加至已命名陳述式輸入內容的區塊。使用縮排。主要用於產生器。嘗試使用 workspaceToCode 或 blockToCode 來產生評估程式碼時。
valueToCode(block, name, outerOrder) 產生代表指定值輸入的程式碼。
workspaceToCode(workspace) 將工作區中所有區塊的程式碼產生指定語言。