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