บล็อกลี > CodeGenerator

คลาส CodeGenerator

ชั้นเรียนสำหรับโปรแกรมสร้างโค้ดที่แปลบล็อกต่างๆ เป็นภาษา

ลายเซ็น:

export declare class CodeGenerator 

ผู้ผลิต

ผู้ผลิต ตัวปรับแต่ง คำอธิบาย
(เครื่องมือสร้าง)(ชื่อ) สร้างอินสแตนซ์ใหม่ของคลาส CodeGenerator

พร็อพเพอร์ตี้

พร็อพเพอร์ตี้ ตัวปรับแต่ง ประเภท คำอธิบาย
COMMENT_WRAP ตัวเลข ความยาวสูงสุดสำหรับความคิดเห็นก่อนตัดข้อความ ไม่นับรวมระดับการเยื้อง
definitions_ protected { [คีย์: สตริง]: สตริง; } พจนานุกรมของคำจำกัดความที่จะพิมพ์ก่อนโค้ด
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

พจนานุกรมของฟังก์ชันสร้างบล็อกที่แบ่งตามประเภทบล็อก ฟังก์ชันสร้างบล็อกแต่ละรายการจะมีพารามิเตอร์ 2 ตัว ดังนี้

- บล็อกเพื่อสร้างโค้ดและอินสแตนซ์การเรียกใช้ CodeGenerator (หรือคลาสย่อย) เพื่อให้ฟังก์ชันเรียกใช้เมธอดที่กำหนดไว้ด้านล่าง (เช่น blockToCode) หรือในคลาสย่อยที่เกี่ยวข้อง (เช่น JavascripGenerator)

และการคืนสินค้า

- ทูเปิล [รหัส, ลำดับความสำคัญ] (สำหรับบล็อกค่า/นิพจน์) หรือ - สตริงที่ประกอบด้วยโค้ดที่สร้างขึ้น (สำหรับบล็อกคำสั่ง) หรือ - เป็นค่าว่างหากไม่ได้ปล่อยโค้ดสำหรับการบล็อก

FUNCTION_NAME_PLACEHOLDER_ string ค่านี้ใช้เป็นตัวยึดตำแหน่งในฟังก์ชันที่กำหนดโดยใช้ CodeGenerator.provideFunction_ ต้องไม่ใช่รหัสทางกฎหมายที่สามารถปรากฏในคำจำกัดความฟังก์ชัน (หรือความคิดเห็น) อย่างถูกต้อง และต้องไม่ทำให้โปรแกรมแยกวิเคราะห์นิพจน์ทั่วไปสับสน
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [คีย์: สตริง]: สตริง; } การจับคู่พจนานุกรมสำหรับชื่อฟังก์ชันที่ต้องการใน Derived_ กับชื่อฟังก์ชันจริง (เพื่อหลีกเลี่ยงการทับซ้อนกับฟังก์ชันของผู้ใช้)
อินเดีย string วิธีการเยื้อง ค่าเริ่มต้นจะเป็นเว้นวรรค 2 ช่อง แต่โปรแกรมสร้างภาษาอาจลบล้างค่านี้เพื่อเพิ่มการเยื้องหรือเปลี่ยนแท็บ
INFINITE_LOOP_TRAP สตริง | ค่าว่าง โค้ดที่กำหนดเองสำหรับแทรกลงในตำแหน่งที่เสี่ยงต่อการทำให้เกิดลูปที่ไม่สิ้นสุด อินสแตนซ์ของ "%1" จะถูกแทนที่ด้วยรหัสการบล็อกที่ล้มเหลว เช่น checkTimeout(%1);\n
isInitialized boolean | null เรียกใช้เมธอด init หรือไม่ โปรแกรมสร้างที่ตั้งค่าแฟล็กนี้เป็น "เท็จ" หลังจากสร้างและตั้งค่าเป็น "จริง" ใน init จะทำให้ blockToCode แสดงคำเตือนหากไม่ได้เริ่มต้นใช้งานโปรแกรมสร้าง หากไม่ได้แตะ ธงนี้จะไม่มีผลใดๆ
name_ string
nameDB_? ชื่อ (ไม่บังคับ) ฐานข้อมูลของตัวแปรและชื่อกระบวนการ
ORDER_OVERRIDES หมายเลข[][] รายการการจับคู่ชั้นนอกด้านในที่ไม่ต้องมีวงเล็บ
RESERVED_WORDS_ protected string รายการคำที่สงวนไว้ซึ่งคั่นด้วยคอมมา
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(รหัส) ขอเกี่ยวโค้ดที่จะทํางานเมื่อสิ้นสุดการสร้างโค้ด คลาสย่อยอาจลบล้างค่านี้ เช่น เพื่อต่อท้ายโค้ดที่สร้างด้วยคำสั่งการนำเข้าหรือการกำหนดตัวแปร
getProcedureName(name) รับชื่อตามกฎหมายที่ไม่ซ้ำกันสำหรับกระบวนการที่ผู้ใช้กำหนด ก่อนที่จะเรียกใช้เมธอดนี้ จะต้องเริ่มต้นพร็อพเพอร์ตี้ nameDB_ ของชั้นเรียนไว้แล้ว ซึ่งโดยปกติจะทําในฟังก์ชัน init ของคลาสเครื่องมือสร้างโค้ด
getVariableName(nameOrId) รับชื่อตามกฎหมายที่ไม่ซ้ำกันสำหรับตัวแปรที่กำหนดโดยผู้ใช้ ก่อนที่จะเรียกใช้เมธอดนี้ จะต้องเริ่มต้นพร็อพเพอร์ตี้ nameDB_ ของชั้นเรียนไว้แล้ว ซึ่งโดยปกติจะทําในฟังก์ชัน init ของคลาสเครื่องมือสร้างโค้ด
init(_workspace) ฮุกสำหรับเรียกใช้โค้ดก่อนเริ่มการสร้างโค้ด คลาสย่อยอาจลบล้างค่านี้ เช่น เพื่อเริ่มต้นฐานข้อมูลชื่อตัวแปร
injectId(ข้อความ, บล็อก) แทรกรหัสบล็อกในข้อความเพื่อแทนที่ "%1" ใช้สำหรับ STATEMENT_PREFIX, STATEMENT_SUFFIX และ INFINITE_LOOP_TRAP
prefixLines(text, prefix) เพิ่มคำนำหน้าทั่วไปไว้หน้าโค้ดแต่ละบรรทัด ใช้สำหรับเยื้องโค้ดหรือเพิ่มตัวทำเครื่องหมายความคิดเห็น
providedFunction_(ชื่อที่ต้องการ, รหัส)

กำหนดฟังก์ชันที่นักพัฒนาแอปกำหนด (ไม่ใช่กระบวนการที่ผู้ใช้กำหนด) เพื่อรวมไว้ในโค้ดที่สร้างขึ้น ใช้สำหรับการสร้างฟังก์ชันผู้ช่วยส่วนตัว ครั้งแรกที่มีการเรียกด้วยชื่อที่เป็นที่ต้องการ ระบบจะบันทึกโค้ดและสร้างชื่อจริงขึ้นมา การเรียกใช้ครั้งต่อๆ ไปด้วย PreferredName เดียวกันจะไม่มีผล แต่มีค่าผลลัพธ์เดียวกัน

ผู้เรียกใช้จะเป็นผู้กำหนดว่าต้องการใช้ PreferredName เดียวกันสำหรับฟังก์ชันตัวช่วยที่แตกต่างกัน (เช่น ใช้ "colourRandom" และ "listRandom" ไม่ใช่ "random") ไม่มีอันตรายใดๆ ที่จะไปชนคำสงวน ชื่อตัวแปรหรือชื่อขั้นตอนที่ผู้ใช้กำหนด

โค้ดจะเอาต์พุตเมื่อมีการเรียก CodeGenerator.finish()

scrub_(_block, code, _opt_thisOnly) งานทั่วไปในการสร้างโค้ดจากบล็อก ซึ่งจะเรียกจาก blockToCode และเรียกทุกๆ บล็อก ไม่ใช่เฉพาะบล็อกระดับบนสุด คลาสย่อยอาจลบล้างส่วนนี้ เช่น เพื่อสร้างโค้ดสำหรับคำสั่งที่ตามบล็อก หรือเพื่อจัดการความคิดเห็นสำหรับการบล็อกที่ระบุและบล็อกค่าที่เชื่อมต่อใดๆ
scrubNakedValue(line) ค่าเปล่าคือบล็อกระดับบนสุดที่มีเอาต์พุตที่ไม่ได้เสียบกับสิ่งใด คลาสย่อยอาจลบล้างส่วนนี้ เช่น หากภาษาของตนไม่อนุญาตให้ใช้ค่าเปล่า
statementToCode(block, name) สร้างสตริงรหัสที่แสดงถึงบล็อกที่แนบกับอินพุตคำสั่งที่มีชื่อ เยื้องรหัส จะใช้ในเครื่องกำเนิดไฟฟ้าเป็นหลัก เมื่อพยายามสร้างโค้ดเพื่อประเมิน ให้ดูที่การใช้ workspaceToCode หรือ blockToCode
valueToCode(block, name, outerOrder) สร้างโค้ดที่แสดงถึงอินพุตค่าที่ระบุ
workspaceToCode(workspace) สร้างโค้ดสำหรับบล็อกทั้งหมดในพื้นที่ทำงานเป็นภาษาที่ระบุ