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) | 將工作區中所有區塊的程式碼產生指定語言。 |