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 untuk komentar sebelum digabungkan. Tidak memperhitungkan tingkat indentasi.
definitions_ protected { [key: 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 block generator mengambil dua parameter:

- Blok untuk membuat kode, dan - instance CodeGenerator (atau subclass) yang memanggil, sehingga fungsi tersebut dapat memanggil metode yang ditentukan di bawah ini (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 harus dimunculkan untuk blok.

FUNCTION_NAME_PLACEHOLDER_ string Ini digunakan sebagai placeholder dalam fungsi yang ditentukan menggunakan CodeGenerator.provideFunction_. Ini tidak boleh berupa kode hukum yang dapat muncul secara sah dalam definisi fungsi (atau komentar), dan tidak boleh membingungkan parser ekspresi reguler.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } Kamus yang memetakan nama fungsi yang diinginkan dalam Definition_ ke nama fungsi yang sebenarnya (untuk menghindari konflik dengan fungsi pengguna).
INDEN string Metode indentasi. Default-nya adalah dua spasi, tetapi generator bahasa dapat menggantinya untuk meningkatkan indentasi atau mengubah ke tab.
INFINITE_LOOP_TRAP string | null Kode arbitrer yang akan dimasukkan ke lokasi yang berisiko menyebabkan loop tanpa henti. Semua instance '%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 mengeluarkan peringatan jika generator belum diinisialisasi. Jika tanda ini tidak disentuh, maka tidak akan berpengaruh.
name_ string
nameDB_? Nama (Opsional) Database nama variabel dan prosedur.
ORDER_OVERRIDES angka[][] Daftar pasangan luar-dalam yang TIDAK memerlukan tanda kurung.
RESERVED_WORDS_ protected string Daftar kata yang dicadangkan yang dipisahkan koma.
STATEMENT_PREFIX string | null Kode arbitrer yang akan dimasukkan sebelum setiap pernyataan. Semua instance '%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 instance '%1' akan diganti dengan ID blok pernyataan tersebut. Misalnya, highlight(%1);\n

Metode

Metode Pengubah Deskripsi
addLoopTrap(branch, block) Tambahkan perangkap loop tanpa batas 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) Membuat pohon blok secara rekursif, menampilkan semua komentar.
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 yang akan dijalankan di akhir pembuatan kode. Subclass dapat menggantinya, misalnya untuk mengawali 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 buatan 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 dijalankan sebelum pembuatan kode dimulai. Subclass dapat menggantinya, misalnya untuk menginisialisasi database nama variabel.
injectId(msg, block) Memasukkan ID blok 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 mengindentasi 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 nama yang diinginkan, kode akan disimpan dan nama sebenarnya akan dibuat. Panggilan berikutnya dengan resultName 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 "random"). Tidak ada bahaya bertabrakan dengan kata yang dicadangkan, atau nama prosedur atau variabel buatan pengguna.

Kode akan mendapatkan output saat CodeGenerator.finish() dipanggil.

scrub_(_blok, kode, _opt_thisOnly) Tugas umum untuk membuat kode dari blok. Metode ini dipanggil dari blockToCode dan dipanggil di setiap blok, bukan hanya blok tingkat atas. Subclass dapat menggantinya, misalnya, membuat kode untuk pernyataan setelah pemblokiran, atau menangani komentar untuk blok tertentu dan blok nilai yang terhubung.
scrubNakedValue(line) Nilai polos adalah blok tingkat atas dengan output yang tidak dicolokkan ke apa pun. Subclass dapat mengganti ini, misalnya jika bahasanya tidak mengizinkan nilai polos.
statementToCode(block, name) Buat string kode yang mewakili blok yang dilampirkan ke input pernyataan bernama. Menambah 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.