CodeGenerator sınıfı
Blokları dile çeviren kod oluşturucu dersi.
İmza:
export declare class CodeGenerator
Markalar
Marka | Değiştiriciler | Açıklama |
---|---|---|
(kurucu)(ad) | CodeGenerator sınıfının yeni bir örneğini oluşturur |
Özellikler
Özellik | Değiştiriciler | Tür | Açıklama |
---|---|---|---|
COMMENT_WRAP | sayı | Bir yorumun sarmalanmadan önceki maksimum uzunluğu. Girinti düzeyini hesaba katmaz. | |
definitions_ | protected |
{ [anahtar: dize]: dize; } | Koddan önce yazdırılacak tanımları içeren bir sözlük. |
forBlock | Record<string, (block: Block, generator: this) => [string, number] | string | null> | Blok türüne göre belirlenen blok oluşturucu işlevleri sözlüğü. Her blok oluşturucu işlevi iki parametre alır: - Kod oluşturma bloku ve - CodeGenerator (veya alt sınıf) örneği için çağrıda bulunma; böylece işlev aşağıda tanımlanan yöntemleri (ör. blockToCode) veya ilgili alt sınıfta (ör. JavascripGenerator) çağırabilir, ve şu sonucu döndürür: - bir [kod, öncelik] demeti (değer/ifade blokları için) veya - oluşturulan kodu içeren bir dize (ifade blokları için) veya - blok için hiçbir kod yayınlanmaması gerekiyorsa null. |
|
FUNCTION_NAME_PLACEHOLDER_ | dize | Bu, CodeGenerator.provideFunction_ kullanılarak tanımlanan işlevlerde yer tutucu olarak kullanılır. Bir işlev tanımında (veya yorumda) meşru olarak görünebilecek yasal kod olmamalı ve normal ifade ayrıştırıcıyı karıştırmamalıdır. | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [anahtar: dize]: dize; } | İstenen işlev adlarını tanımlar_ içindeki gerçek işlev adlarıyla eşleştiren (kullanıcı işlevleriyle çakışmaları önlemek amacıyla) bir sözlük. |
TARİH | dize | Girintileme yöntemi. Varsayılan olarak iki boşluk kullanılır, ancak dil oluşturucuları girintiyi artırmak veya sekmelere geçmek için bunu geçersiz kılabilir. | |
INFINITE_LOOP_TRAP | dize | null | Sonsuz döngüye neden olma riski taşıyan konumlara eklenecek rastgele kod. Tüm "%1" örnekleri, başarısız olan blok kimliğiyle değiştirilir. Ör. checkTimeout(%1);\n |
|
isInitialized | boolean | null | Başlatma yönteminin çağrılıp çağrılmadığı. Oluşturma işleminden sonra bu işareti false (yanlış) ve init içinde true olarak ayarlayan oluşturucular, oluşturucu başlatılmadıysa blockToCode'un uyarı vermesine neden olur. Bu işarete dokunulmazsa hiçbir etkisi olmaz. | |
name_ | dize | ||
nameDB_? | Adlar | (İsteğe bağlı) Değişken ve prosedür adları veritabanı. | |
ORDER_OVERRIDES | numara[][] | Parantez Gerektirmeyen İç-dış çiftlerin listesi. | |
RESERVED_WORDS_ | protected |
dize | Ayrılmış kelimelerin virgülle ayrılmış listesi. |
STATEMENT_PREFIX | dize | null | Her ifadeden önce eklenecek rastgele kod. Tüm "%1" örnekleri, ifadenin blok kimliğiyle değiştirilir. Ör. highlight(%1);\n |
|
STATEMENT_SUFFIX | dize | null | Her ifadeden sonra eklenecek rastgele kod. Tüm "%1" örnekleri, ifadenin blok kimliğiyle değiştirilir. Ör. highlight(%1);\n |
Yöntemler
Yöntem | Değiştiriciler | Açıklama |
---|---|---|
addLoopTrap(branch, block) | Bir döngünün içeriğine sonsuz döngü tuzağı ekleyin. Döngü bloğunun başına (döngü ifadesi yürütüldükten hemen sonra) ifade son eki, döngü bloğunun sonuna ise bir ifade öneki ekleyin (döngü ifadesi yürütülmeden hemen önce). | |
addReservedWords(words) | Bu dil için ayrılmış kelimeler listesine bir veya daha fazla kelime ekleyin. | |
allNestedComments(block) | Bir blok ağacını tekrarlı bir şekilde örümcekleyin ve tüm yorumlarını döndürün. | |
blockToCode(block, opt_thisOnly) | Belirtilen blok (ve eklenen bloklar) için kod oluşturun. Bu işlev çağrılmadan önce oluşturucu başlatılmalıdır. | |
finish(kod) | Kod oluşturma işleminin sonunda kodun çalıştırılması için kanca. Alt sınıflar bunu geçersiz kılabilir (örneğin, oluşturulan kodun başına içe aktarma ifadeleri veya değişken tanımları eklemek için). | |
getProcedureName(name) | Kullanıcı tanımlı bir prosedür için benzersiz, yasal bir ad alır. Bu yöntem çağrılmadan önce sınıfın nameDB_ özelliği başlatılmış olmalıdır. Bu genellikle kod oluşturma aracı sınıfının init işlevinde yapılır. |
|
getVariableName(nameOrId) | Kullanıcı tanımlı bir değişken için benzersiz, yasal bir ad alır. Bu yöntem çağrılmadan önce sınıfın nameDB_ özelliği başlatılmış olmalıdır. Bu genellikle kod oluşturma aracı sınıfının init işlevinde yapılır. |
|
init(_workspace) | Kod oluşturma işlemi başlamadan önce kodun çalıştırılmasını sağlayın. Alt sınıflar bunu geçersiz kılabilir (örneğin, değişken adları veritabanını ilk kullanıma hazırlamak için). | |
injectId(mesaj, engelle) | "%1" ifadesini değiştirmek için iletiye bir blok kimliği ekleyin. STATEMENT_PREFIX, STATEMENT_SUFFIX ve INFINITE_LOOP_TRAP için kullanılır. | |
prefixLines(text, prefix) | Her kod satırının başına ortak bir önek ekleyin. Girinti kodu eklemek veya yorum işaretçileri eklemek için tasarlanmıştır. | |
provideFunction_(desiredName, kod) | Oluşturulan koda dahil edilecek geliştirici tarafından tanımlanan bir işlev (kullanıcı tanımlı bir prosedür değil) tanımlayın. Gizli yardımcı işlevleri oluşturmak için kullanılır. Bu öğe belirli bir istenenName ile ilk kez çağrıldığında, kod kaydedilir ve gerçek bir ad oluşturulur. Aynı istenenName öğesine sahip sonraki çağrıların herhangi bir etkisi yoktur ancak aynı döndürülen değere sahiptir. Aynı istenenName öğesinin farklı yardımcı işlevler için kullanılmadığından emin olmak (ör. "rastgele" değil, "colourRandom" ve "listRandom" kullanın) arayana bağlıdır. Ayrılmış kelimeler veya kullanıcı tanımlı değişken ya da prosedür adlarıyla çakışma tehlikesi yoktur. CodeGenerator.finish() çağrıldığında kod çıktısı alır. |
|
scrub_(_block; kod; _opt_thisOnly) | Bloklardan kod üretmeyle ilgili genel görevler. Bu, blockToCode'dan ve yalnızca üst seviye bloklarda değil her blokta çağrılır. Alt sınıflar bunu geçersiz kılabilir. Örneğin, engellemeyi izleyen ifadeler için kod oluşturmak veya belirtilen blok ve tüm bağlı değer blokları için yorumları işlemek üzere kullanabilirsiniz. | |
scrubNakedValue(line) | Açık değerler, hiçbir şeye bağlı olmayan çıkışlara sahip üst düzey bloklardır. Alt sınıflar bunu geçersiz kılabilir (ör. dilleri çıplak değerlere izin vermiyorsa). | |
statementToCode(block, name) | Adlandırılmış ifade girişine eklenen blokları temsil eden bir kod dizesi oluşturun. Kodu girintileyin. Bu genellikle oluşturucularda kullanılır. Değerlendirmek için kod oluşturmaya çalışırken workspaceToCode veya blockToCode işlevini kullanın. | |
valueToCode(block, name, outerOrder) | Belirtilen değer girişini temsil eden kod oluşturun. | |
workspaceToCode(workspace) | Çalışma alanındaki tüm bloklar için belirtilen dilde kod oluşturun. |