CodeGenerator 類別
用於將區塊翻譯成語言的程式碼產生器類別。
Signature:
export declare class CodeGenerator
建構函式
建構函式 | 修飾符 | 說明 |
---|---|---|
(建構函式)(名稱) | 建構 CodeGenerator 類別的新例項 |
屬性
屬性 | 修飾符 | 類型 | 說明 |
---|---|---|---|
COMMENT_WRAP | 號碼 | 註解在換行前的長度上限。不考慮縮排層級。 | |
definitions_ | protected |
{ [鍵:字串]: string; } | 要在程式碼之前輸出的定義字典。 |
forBlock | Record<string, (block: Block, generator: this) => [string, number] | string | null> | 區塊產生器函式的字典,按照區塊類型設定索引鍵。每個區塊產生器函式都使用兩個參數: - 產生程式碼的方塊;呼叫 - 呼叫 CodeGenerator (或子類別),讓函式可以呼叫以下定義的方法 (例如 blockToCode) 或相關子類別 (例如 JavascripGenerator), 以及傳回: - [code,優先] 元組 (用於值/運算式區塊) 或 - 包含產生程式碼的字串 (用於陳述式區塊);如果沒有對區塊發出程式碼,則為空值。 |
|
FUNCTION_NAME_PLACEHOLDER_ | 字串 | 這會做為使用 CodeGenerator.provideFunction_ 定義的函式中的預留位置。不得為函式定義 (或註解) 中的合法代碼,而且不得混淆規則運算式剖析器。 | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [鍵:字串]: string; } | 可在定義中將所需函式名稱對應至實際函式名稱的字典 (以避免使用者函式發生衝突)。 |
產業 | 字串 | 縮排方法。預設值為兩個空格,但語言產生器可能會覆寫這項設定,增加縮排或變更為定位點。 | |
INFINITE_LOOP_TRAP | 字串 | 空值 | 用於注入風險位置的任意程式碼。所有「%1」的執行個體都會替換為失敗的區塊 ID。例如: checkTimeout(%1);\n |
|
isInitialized | boolean | null | 指出是否已呼叫 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(code) | 讓程式碼在程式碼產生結束時執行。子類別可能會覆寫這項設定,例如在產生的程式碼前面加上匯入陳述式或變數定義。 | |
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, code) | 定義要在產生的程式碼中加入的開發人員定義函式 (非使用者定義的程序)。用於建立私人輔助函式。初次使用特定 Name 呼叫這個執行個體時,系統會儲存該程式碼並產生實際名稱。後續呼叫具有相同期望 Name 的效果不會有任何效果,但傳回值相同。 呼叫端可自行確保不同的輔助函式沒有使用相同的 needName (例如:使用「colourRandom」和「listRandom」,而非「random」)。與保留字詞、使用者定義的變數或程序名稱之間不會有衝突。 呼叫 CodeGenerator.finish() 時,程式碼會取得輸出內容。 |
|
scrub_(_block, code, _opt_thisOnly) | 從區塊產生程式碼的常見工作。這會透過 blockToCode 呼叫,並在每個區塊中呼叫,而不只是頂層區塊。子類別可能會覆寫這項設定,例如為區塊之後的陳述式產生程式碼,或是處理指定區塊和任何連結值區塊的註解。 | |
scrubNakedValue(line) | Naked 值是頂層區塊,其中的輸出內容沒有插入任何項目。子類別可能會覆寫這個值,例如語言不允許使用裸名值。 | |
statementToCode(block, name) | 產生程式碼字串,代表附加至已命名陳述式輸入內容的區塊。為程式碼縮排。這主要用於產生器中。如要嘗試產生程式碼來評估使用 workspaceToCode 或 blockToCode, | |
valueToCode(block, name, outerOrder) | 產生代表輸入指定值的程式碼。 | |
workspaceToCode(workspace) | 為工作區中的所有區塊以指定語言產生程式碼。 |