blockly > CodeGenerator

Class CodeGenerator

Class untuk generator kode yang menerjemahkan blok ke dalam bahasa.

Tanda Tangan:

export declare class CodeGenerator 

Konstruktor

Konstruktor Pengubah Deskripsi
(konstruktor)(nama) Membuat instance baru dari class CodeGenerator

Properti

Properti Pengubah Jenis Deskripsi
COMMENT_WRAP angka Panjang maksimum komentar sebelum penggabungan. Tidak memperhitungkan tingkat indentasi.
definitions_ protected { [kunci: string]: string; } Kamus definisi yang akan dicetak sebelum kode.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

Kamus fungsi generator blok, yang dikunci berdasarkan jenis blok. Setiap fungsi generator blok memerlukan dua parameter:

- Blok untuk menghasilkan kode, dan - instance CodeGenerator (atau subclass) yang memanggil, sehingga fungsi tersebut dapat memanggil metode yang ditentukan di bawah (misalnya blockToCode) atau pada subclass yang relevan (misalnya JavascripGenerator),

dan mengembalikan:

- tuple [kode, prioritas] (untuk blok nilai/ekspresi), atau - string yang berisi kode yang dihasilkan (untuk blok pernyataan), atau - null jika tidak ada kode yang akan dimunculkan untuk blok.

FUNCTION_NAME_PLACEHOLDER_ string Ini digunakan sebagai placeholder dalam fungsi yang ditentukan menggunakan CodeGenerator.provideFunction_. Ini tidak boleh berupa kode resmi yang dapat muncul secara sah dalam definisi fungsi (atau komentar), dan tidak boleh membingungkan parser ekspresi reguler.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [kunci: string]: string; } Kamus yang memetakan nama fungsi yang diinginkan dalam definisi_ ke nama fungsi sebenarnya (untuk menghindari konflik dengan fungsi pengguna).
INDENSI string Metode indentasi. Default-nya adalah dua spasi, tetapi generator bahasa dapat menggantinya untuk meningkatkan indentasi atau beralih ke tab.
INFINITE_LOOP_TRAP string | null Kode arbitrer yang akan dimasukkan ke lokasi yang berisiko menyebabkan loop tak terbatas. Semua kemunculan '%1' akan diganti dengan ID pemblokiran yang gagal. Misalnya, checkTimeout(%1);\n
isInitialized boolean | null Apakah metode init telah dipanggil. Generator yang menyetel flag ini ke false setelah dibuat dan true dalam init akan menyebabkan blockToCode memberikan peringatan jika generator belum diinisialisasi. Jika tanda ini tidak disentuh, tanda ini tidak akan berpengaruh.
name_ string
nameDB_? Nama (Opsional) Database nama variabel dan prosedur.
ORDER_OVERRIDES nomor[][] Daftar pasangan luar-dalam yang TIDAK memerlukan tanda kurung.
RESERVED_WORDS_ protected string Daftar kata yang dicadangkan untuk sistem yang dipisahkan koma.
STATEMENT_PREFIX string | null Kode arbitrer yang akan dimasukkan sebelum setiap pernyataan. Semua kemunculan '%1' akan diganti dengan ID blok pernyataan tersebut. Misalnya, highlight(%1);\n
STATEMENT_SUFFIX string | null Kode arbitrer yang akan dimasukkan setelah setiap pernyataan. Semua kemunculan '%1' akan diganti dengan ID blok pernyataan tersebut. Misalnya, highlight(%1);\n

Metode

Metode Pengubah Deskripsi
addLoopTrap(branch, block) Menambahkan perangkap loop tak terbatas ke konten loop. Tambahkan akhiran pernyataan di awal blok loop (tepat setelah pernyataan loop dieksekusi), dan awalan pernyataan ke akhir blok loop (tepat sebelum pernyataan loop dieksekusi).
addReservedWords(words) Tambahkan satu atau beberapa kata ke daftar kata yang dicadangkan untuk bahasa ini.
allNestedComments(block) secara rekursif spider pohon blok secara rekursif, menampilkan semua komentar mereka.
blockToCode(block, opt_thisOnly) Membuat kode untuk blok yang ditentukan (dan blok yang terpasang). Generator harus diinisialisasi sebelum memanggil fungsi ini.
finish(kode) Hook untuk kode agar berjalan di akhir pembuatan kode. Subclass dapat mengganti ini, misalnya untuk menambahkan kode yang dihasilkan dengan pernyataan impor atau definisi variabel.
getProcedureName(name) Mendapatkan nama resmi yang unik untuk prosedur yang ditentukan pengguna. Sebelum memanggil metode ini, properti nameDB_ class harus sudah diinisialisasi. Hal ini biasanya dilakukan dalam fungsi init dari class generator kode.
getVariableName(nameOrId) Mendapatkan nama resmi yang unik untuk variabel yang ditentukan pengguna. Sebelum memanggil metode ini, properti nameDB_ class harus sudah diinisialisasi. Hal ini biasanya dilakukan dalam fungsi init dari class generator kode.
init(_workspace) Hook untuk kode yang akan dijalankan sebelum pembuatan kode dimulai. Subclass dapat mengganti ini, mis. untuk menginisialisasi database nama variabel.
injectId(msg, block) Memasukkan ID blokir ke dalam pesan untuk mengganti '%1'. Digunakan untuk STATEMENT_PREFIX, STATEMENT_SUFFIX, dan INFINITE_LOOP_TRAP.
prefixLines(text, prefix) Tambahkan awalan umum ke setiap baris kode. Ditujukan untuk membuat indentasi kode atau menambahkan penanda komentar.
ProvideFunction_(desiredName, kode)

Tentukan fungsi yang ditentukan developer (bukan prosedur yang ditentukan pengguna) untuk disertakan dalam kode yang dihasilkan. Digunakan untuk membuat fungsi bantuan pribadi. Saat pertama kali dipanggil dengan sesuatu yang diinginkan, kode akan disimpan dan nama sebenarnya akan dibuat. Panggilan berikutnya dengan requiredName yang sama tidak akan berpengaruh, tetapi akan memiliki nilai hasil yang sama.

Terserah pemanggil untuk memastikan nama yang sama yang diinginkan tidak digunakan untuk fungsi bantuan yang berbeda (misalnya gunakan "colourRandom" dan "listRandom", bukan "acak"). Tidak ada bahaya bertabrakan dengan kata-kata yang dicadangkan, atau nama variabel atau prosedur buatan pengguna.

Kode mendapatkan output saat CodeGenerator.finish() dipanggil.

scrub_(_block, kode, _opt_thisOnly) protected Tugas umum untuk membuat kode dari blok. Ini dipanggil dari blockToCode dan dipanggil di setiap blok, bukan hanya blok tingkat atas. Subclass dapat menimpa ini, misalnya untuk membuat kode untuk pernyataan setelah blok, atau untuk menangani komentar untuk blok yang ditentukan dan blok nilai yang terhubung.
scrubNakedValue(line) Nilai polos adalah blok tingkat atas dengan output yang tidak terhubung ke apa pun. Subclass dapat mengganti ini, mis. jika bahasanya tidak mengizinkan nilai tanpa awalan www.
statementToCode(block, name) Buat string kode yang mewakili blok yang dilampirkan ke input pernyataan bernama. Indentasi kode. Ini terutama digunakan pada generator. Saat mencoba membuat kode untuk mengevaluasi, lihat penggunaan workspaceToCode atau blockToCode.
valueToCode(block, name, outerOrder) Membuat kode yang mewakili input nilai yang ditentukan.
workspaceToCode(workspace) Buat kode untuk semua blok di ruang kerja ke bahasa yang ditentukan.