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 | Rekam<string, (block: Block, generator: this) => [string, angka] | rangkaian | null> | Kamus fungsi generator blok, yang terkunci berdasarkan jenis blok. Setiap fungsi generator blok mengambil dua parameter: - Blok untuk menghasilkan kode, dan - instance CodeGenerator (atau subclass) yang memanggil, sehingga fungsi dapat memanggil metode yang ditentukan di bawah ini (mis. blockToCode) atau pada subclass yang relevan (mis. JavascripGenerator), dan menampilkan: - 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_. Pengendali 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-nama fungsi yang diinginkan dalam definisi_ ke nama fungsi yang sebenarnya (untuk menghindari konflik dengan fungsi pengguna). |
INDENT | string | Metode indentasi. Setelan defaultnya adalah dua spasi, tetapi generator bahasa dapat mengganti ini untuk menambah indentasi atau perubahan ke tab. | |
INFINITE_LOOP_TRAP | rangkaian | null (kosong) | Kode arbitrer untuk dimasukkan ke lokasi yang berisiko menyebabkan loop tak terbatas. Semua contoh '%1' akan diganti dengan ID blok yang gagal. Mis. checkTimeout(%1);\n |
|
isInitialized | boolean | null (kosong) | Apakah metode init telah dipanggil. Generator yang menyetel tanda ini ke salah (false) setelah dibuat dan benar (true) dalam init akan menyebabkan blockToCode memunculkan peringatan jika generator belum diinisialisasi. Jika bendera ini tidak disentuh, penanda ini 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 khusus yang dipisahkan koma. |
STATEMENT_PREFIX | rangkaian | null (kosong) | Kode arbitrer yang akan dimasukkan sebelum setiap pernyataan. Semua contoh '%1' akan diganti dengan ID blok pernyataan. Mis. highlight(%1);\n |
|
STATEMENT_SUFFIX | rangkaian | null (kosong) | Kode arbitrer yang akan dimasukkan setelah setiap pernyataan. Semua contoh '%1' akan diganti dengan ID blok pernyataan. Mis. 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 di 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 laba-laba pohon blok, menampilkan semua komentar mereka. | |
blockToCode(block, opt_thisOnly) | Membuat kode untuk blok yang ditentukan (dan blok terlampir). Generator harus diinisialisasi sebelum memanggil fungsi ini. | |
finish(kode) | Hook untuk menjalankan kode pada 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 menjalankan kode sebelum pembuatan kode dimulai. Subclass dapat menggantinya, misalnya untuk menginisialisasi {i>database<i} nama variabel. | |
injectId(msg, block) | Memasukkan ID blok ke dalam pesan untuk mengganti '%1'. Digunakan untuk WHEREMENT_PREFIX, statementMENT_SUFFIX, dan INFINITE_LOOP_TRAP. | |
prefixLines(text, prefix) | Tambahkan awalan umum ke setiap baris kode. Ditujukan untuk membuat indentasi kode atau menambahkan penanda komentar. | |
menyediakanFunction_(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 tertentu, kode akan disimpan dan nama sebenarnya dibuat. Panggilan berikutnya dengan nama yang diinginkan yang sama tidak akan berpengaruh, tetapi memiliki nilai hasil yang sama. Terserah pemanggil untuk memastikan nama yang sama diinginkan tidak digunakan untuk fungsi bantuan yang berbeda (misalnya menggunakan "colorRandom" dan "listRandom", bukan "random"). Tidak boleh bertabrakan dengan kata-kata yang digunakan sistem, atau nama prosedur atau variabel buatan pengguna. Kode ini mendapatkan output saat CodeGenerator.finish() dipanggil. |
|
scrub_(_blok, kode, _opt_thisOnly) | Tugas umum untuk menghasilkan kode dari blok. Fungsi ini dipanggil dari blockToCode dan dipanggil di setiap blok, bukan hanya blok tingkat atas. Subclass dapat menggantinya, misalnya untuk menghasilkan kode untuk pernyataan setelah blok, atau menangani komentar untuk blok yang ditentukan dan blok nilai apa pun yang terhubung. | |
scrubNakedValue(line) | Nilai tanpa awalan www adalah blok tingkat atas dengan output yang tidak dicolokkan ke apa pun. Subclass dapat menggantinya, misalnya jika bahasanya tidak mengizinkan nilai telanjang. | |
statementToCode(block, name) | Buat string kode yang mewakili blok yang dilampirkan ke input pernyataan bernama. Indentasi kode. Ini terutama digunakan dalam generator. Saat mencoba membuat kode untuk mengevaluasi, lihat penggunaan workspaceToCode atau blockToCode. | |
valueToCode(block, name, outerOrder) | Buat kode yang mewakili input nilai yang ditentukan. | |
workspaceToCode(workspace) | Buat kode untuk semua blok di ruang kerja ke bahasa yang ditentukan. |