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. |