blockly > CodeGenerator

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.