คลาส CodeGenerator
ชั้นเรียนสำหรับเครื่องมือสร้างโค้ดที่แปลบล็อกต่างๆ เป็นภาษา
ลายเซ็น:
export declare class CodeGenerator
ผู้ผลิต
ผู้ผลิต | ตัวปรับแต่ง | คำอธิบาย |
---|---|---|
(เครื่องมือสร้าง)(ชื่อ) | สร้างอินสแตนซ์ใหม่ของคลาส CodeGenerator |
พร็อพเพอร์ตี้
พร็อพเพอร์ตี้ | ตัวปรับแต่ง | Type | คำอธิบาย |
---|---|---|---|
COMMENT_WRAP | ตัวเลข | ความยาวสูงสุดสำหรับความคิดเห็นก่อนตัดข้อความ ไม่ใช้ระดับการเยื้อง | |
definitions_ | protected |
{ [คีย์: string]: string; } | พจนานุกรมของคำจำกัดความที่จะพิมพ์ก่อนโค้ด |
forBlock | Record<string, (block: Block, generator: this) => [string, number] | string | null> | พจนานุกรมของฟังก์ชันสร้างบล็อกซึ่งป้อนคีย์ตามประเภทบล็อก ฟังก์ชันสร้างบล็อกแต่ละรายการจะใช้พารามิเตอร์ 2 ตัว ดังนี้ - การบล็อกเพื่อสร้างโค้ดสำหรับ และ - การเรียกใช้ CodeGenerator (หรือคลาสย่อย) เพื่อให้ฟังก์ชันเรียกใช้เมธอดที่กำหนดไว้ด้านล่าง (เช่น blockToCode) หรือในคลาสย่อยที่เกี่ยวข้อง (เช่น JavascripGenerator) และการคืนสินค้า: - ทูเปิล [รหัส, ลำดับความสำคัญ] (สำหรับบล็อกค่า/นิพจน์) หรือ - สตริงที่มีโค้ดที่สร้างขึ้น (สำหรับบล็อกคำสั่ง) หรือ - เป็นค่าว่าง หากไม่มีการเรียกใช้โค้ดสำหรับการบล็อก |
|
FUNCTION_NAME_PLACEHOLDER_ | สตริง | ค่านี้ใช้เป็นตัวยึดตำแหน่งในฟังก์ชันที่กำหนดโดยใช้ CodeGenerator.provideFunction_ โดยต้องไม่เป็นโค้ดทางกฎหมายที่สามารถปรากฏอย่างถูกต้องในคำจำกัดความฟังก์ชัน (หรือความคิดเห็น) และต้องไม่ทำให้โปรแกรมแยกวิเคราะห์นิพจน์ทั่วไปสับสน | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [คีย์: string]: string; } | การจับคู่พจนานุกรมชื่อฟังก์ชันที่ต้องการในคำอธิบาย_ กับชื่อฟังก์ชันจริง (เพื่อหลีกเลี่ยงความขัดแย้งกับฟังก์ชันของผู้ใช้) |
อินโดนีเซีย | สตริง | วิธีการเยื้อง ค่าเริ่มต้นคือเว้นวรรค 2 ช่อง แต่เครื่องมือสร้างภาษาอาจลบล้างค่านี้เพื่อเพิ่มการเยื้องหรือเปลี่ยนแท็บ | |
INFINITE_LOOP_TRAP | สตริง | ไม่มีข้อมูล | โค้ดที่กำหนดเองสำหรับใส่ลงในตำแหน่งที่เสี่ยงต่อการทำให้เกิดลูปที่ไม่สิ้นสุด อินสแตนซ์ของ "%1" จะถูกแทนที่ด้วยรหัสการบล็อกที่ดำเนินการไม่สำเร็จ เช่น checkTimeout(%1);\n |
|
isInitialized | boolean | null | มีการเรียกใช้เมธอด init หรือไม่ โปรแกรมสร้างที่ตั้งค่า Flag นี้เป็น "เท็จ" หลังจากสร้างและตั้งค่าจริงใน init จะทำให้ blockToCode ส่งคำเตือนหากโปรแกรมสร้างยังไม่มีการเริ่มต้น หากไม่ได้แตะธงนี้ ก็จะไม่มีผลใดๆ | |
name_ | สตริง | ||
nameDB_? | ชื่อ | (ไม่บังคับ) ฐานข้อมูลของชื่อตัวแปรและกระบวนการ | |
ORDER_OVERRIDES | หมายเลข[][] | รายการการจับคู่ด้านนอกด้านในที่ไม่ต้องมีวงเล็บ | |
RESERVED_WORDS_ | protected |
สตริง | รายการคำที่สงวนไว้ซึ่งคั่นด้วยคอมมา |
STATEMENT_PREFIX | สตริง | ไม่มีข้อมูล | แทรกโค้ดที่กำหนดเองก่อนคำสั่งทุกครั้ง กรณีใดก็ตามของ "%1" จะถูกแทนที่ด้วยรหัสบล็อกของคำสั่ง เช่น highlight(%1);\n |
|
STATEMENT_SUFFIX | สตริง | ไม่มีข้อมูล | ใส่โค้ดที่กำหนดเองหลังทุกคำสั่ง กรณีใดก็ตามของ "%1" จะถูกแทนที่ด้วยรหัสบล็อกของคำสั่ง เช่น highlight(%1);\n |
วิธีการ
วิธีการ | ตัวปรับแต่ง | คำอธิบาย |
---|---|---|
addLoopTrap(branch, block) | เพิ่มกับดักการวนซ้ำในเนื้อหาของลูป เพิ่มส่วนต่อท้ายของบล็อกวนซ้ำ (หลังจากที่คำสั่งวนซ้ำดำเนินการแล้ว) และคำนำหน้าคำสั่งต่อท้ายสิ้นสุดบล็อกลูป (ก่อนที่คำสั่งวนซ้ำจะทำงาน) | |
addReservedWords(words) | เพิ่มคำอย่างน้อย 1 คำลงในรายการคำที่สงวนไว้สำหรับภาษานี้ | |
allNestedComments(block) | จัดการบล็อกต้นไม้ซ้ำไปเรื่อยๆ พร้อมแสดงความคิดเห็นทั้งหมด | |
blockToCode(block, opt_thisOnly) | สร้างโค้ดสำหรับบล็อกที่ระบุ (และบล็อกที่แนบ) เครื่องมือสร้างต้องเริ่มต้นก่อนเรียกใช้ฟังก์ชันนี้ | |
finish(code) | ฮุกสำหรับเรียกใช้โค้ดเมื่อสิ้นสุดการสร้างโค้ด คลาสย่อยอาจลบล้างส่วนนี้ เช่น เพื่อเพิ่มโค้ดที่สร้างด้วยคำสั่งนำเข้าหรือการกำหนดตัวแปร | |
getProcedureName(name) | รับชื่อตามกฎหมายที่ไม่ซ้ำกันสำหรับกระบวนการที่ผู้ใช้กำหนด ก่อนที่จะเรียกใช้เมธอดนี้ จะต้องมีการเริ่มต้นพร็อพเพอร์ตี้ nameDB_ ของคลาสไว้แล้ว ซึ่งโดยปกติจะทําในฟังก์ชัน init ของคลาสเครื่องมือสร้างโค้ด |
|
getVariableName(nameOrId) | รับชื่อตามกฎหมายที่ไม่ซ้ำกันสำหรับตัวแปรที่กำหนดโดยผู้ใช้ ก่อนที่จะเรียกใช้เมธอดนี้ จะต้องมีการเริ่มต้นพร็อพเพอร์ตี้ nameDB_ ของคลาสไว้แล้ว ซึ่งโดยปกติจะทําในฟังก์ชัน init ของคลาสเครื่องมือสร้างโค้ด |
|
init(_workspace) | ฮุกเพื่อเรียกใช้โค้ดก่อนที่จะเริ่มต้นสร้างโค้ด คลาสย่อยอาจลบล้างส่วนนี้ เช่น เพื่อเริ่มต้นฐานข้อมูลชื่อตัวแปร | |
injectId(ข้อความ, บล็อก) | ใส่รหัสบล็อกในข้อความเพื่อแทนที่ "%1" ใช้สำหรับ STATEMENT_PREFIX, STATEMENT_SUFFIX และ INFINITE_LOOP_TRAP | |
prefixLines(text, prefix) | เพิ่มคำนำหน้าทั่วไปลงในโค้ดแต่ละบรรทัด มีไว้สำหรับการเยื้องโค้ดหรือเพิ่มตัวทำเครื่องหมายความคิดเห็น | |
provideFunction_(ชื่อที่ต้องการ, โค้ด) | กำหนดฟังก์ชันที่นักพัฒนาซอฟต์แวร์กำหนด (ไม่ใช่ขั้นตอนที่ผู้ใช้กำหนด) เพื่อรวมไว้ในโค้ดที่สร้างขึ้น ใช้สำหรับการสร้างฟังก์ชันผู้ช่วยส่วนตัว ครั้งแรกที่มีการเรียกด้วย PreferredName ที่ระบุ ระบบจะบันทึกโค้ดและสร้างชื่อจริง การเรียกครั้งต่อๆ ไปด้วย PreferredName เดียวกันจะไม่มีผล แต่จะมีมูลค่าการแสดงผลเดียวกัน ขึ้นอยู่กับผู้เรียกใช้เพื่อตรวจสอบว่าไม่มีการใช้ PreferredName เดียวกันสำหรับฟังก์ชันผู้ช่วยเหลือที่แตกต่างกัน (เช่น ใช้ "colourRandom" และ "listRandom" ไม่ใช่ "random") ไม่มีอันตรายใดๆ ที่จะนำไปชนคำที่สงวนไว้ ตัวแปร หรือชื่อกระบวนการที่ผู้ใช้กำหนด โค้ดจะเอาต์พุตเมื่อมีการเรียก CodeGenerator.finish() |
|
scrub_(_block, code, _opt_thisOnly) | protected |
งานทั่วไปสำหรับการสร้างโค้ดจากบล็อก ซึ่งเรียกใช้จาก blockToCode และมีการเรียกใช้ในทุกบล็อก ไม่ใช่เฉพาะบล็อกระดับบนสุด คลาสย่อยอาจลบล้างส่วนนี้ เช่น เพื่อสร้างโค้ดสำหรับคำสั่งที่ตามหลังการบล็อก หรือเพื่อจัดการความคิดเห็นสำหรับการบล็อกที่ระบุและการบล็อกค่าที่เชื่อมต่อ |
scrubNakedValue(line) | ค่าเปล่าคือบล็อกระดับบนสุดที่มีเอาต์พุตที่ไม่ได้เสียบกับอะไรเลย คลาสย่อยอาจลบล้างส่วนนี้ เช่น หากภาษาไม่อนุญาตให้ใช้ค่าเปล่า | |
statementToCode(block, name) | สร้างสตริงรหัสที่แสดงถึงบล็อกที่แนบมากับอินพุตคำสั่งที่มีชื่อ เยื้องรหัส มักใช้ในเครื่องกำเนิดไฟฟ้า เมื่อพยายามสร้างโค้ดเพื่อประเมิน ให้ใช้ workspaceToCode หรือ blockToCode | |
valueToCode(block, name, outerOrder) | สร้างโค้ดที่แทนอินพุตค่าที่ระบุ | |
workspaceToCode(workspace) | สร้างโค้ดสำหรับบล็อกทั้งหมดในพื้นที่ทำงานเป็นภาษาที่ระบุ |