CodeGenerator 類別
程式碼產生器的類別,可將區塊翻譯成語言。
Signature:
export declare class CodeGenerator
建構函式
建構函式 | 修飾符 | 說明 |
---|---|---|
(建構函式)(名稱) | 建構 CodeGenerator 類別的新執行個體 |
屬性
屬性 | 修飾符 | 類型 | 說明 |
---|---|---|---|
COMMENT_WRAP | 號碼 | 將註解換行前的長度上限。不會考量縮排層級。 | |
definitions_ | protected |
{ [key: string]: string; } | 要在程式碼之前輸出的定義字典。 |
forBlock | Record<string, (block: Block, generator: this) => [string, number] | string | null> | 區塊產生器函式的字典,索引鍵,索引鍵為區塊。每個區塊產生器函式都使用兩個參數: - 用來產生程式碼的區塊,以及呼叫 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 | boolean | null | 是否呼叫了 init 方法。如果產生器在建立後將這個標記設為 false,並且在 init 中設定 true,則會在產生器尚未初始化時,BlockToCode 會發出警告。如果你沒有修改這個標記,則不會有任何作用。 | |
name_ | 字串 | ||
nameDB_? | 名稱 | (選用) 變數和程序名稱的資料庫。 | |
ORDER_OVERRIDES | 數字 [][] | 「不需要」括號的外內配對清單。 | |
RESERVED_WORDS_ | protected |
字串 | 以半形逗號分隔的保留字詞清單。 |
STATEMENT_PREFIX | 字串 | 空值 | 要在每個陳述式之前插入的任意程式碼。陳述式的所有區塊 ID 都會取代「%1」的執行個體。例如:highlight(%1);\n |
|
STATEMENT_SUFFIX | 字串 | 空值 | 要在每個陳述式後方插入的任意程式碼。陳述式的所有區塊 ID 都會取代「%1」的執行個體。例如: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, code) | 定義要包含在產生的程式碼中,由開發人員定義的函式 (而非使用者定義的程序)。用於建立私人輔助函式。第一次使用指定的想要名稱呼叫這個程式碼時,系統會儲存程式碼並產生實際名稱。使用 same needName 的後續呼叫不會產生任何作用,但傳回的值會相同。 呼叫端會自行確認不同的輔助函式並未使用相同的想要名稱 (例如使用「colourRandom」和「listRandom」,而非「random」)。這種狀況不會造成與保留字詞衝突,或使用者定義的變數或程序名稱衝突。 呼叫 CodeGenerator.finish() 時,就會輸出程式碼。 |
|
scrub_(_block, 程式碼, _opt_thisOnly) | protected |
從區塊產生程式碼的常見工作。這個程式碼會從 blockToCode 呼叫,而且會在每個區塊中呼叫,而不只是頂層區塊。子類別可能會覆寫這項設定,例如產生區塊後方的陳述式程式碼,或是處理指定區塊和任何連結值區塊的註解。 |
scrubNakedValue(line) | 裸名值是頂層區塊,其輸出內容不會插入任何元件。舉例來說,子類別可能會覆寫這項設定,例如當其語言不允許裸名值時。 | |
statementToCode(block, name) | 產生程式碼字串,代表附加至已命名陳述式輸入內容的區塊。將程式碼縮排。主要用於產生器。嘗試產生程式碼以評估使用 workspaceToCode 或 BlockToCode 時。 | |
valueToCode(block, name, outerOrder) | 產生代表指定值輸入內容的程式碼。 | |
workspaceToCode(workspace) | 為工作區中的所有區塊產生指定語言的程式碼。 |