blockly > CodeGenerator

CodeGenerator sınıfı

Blokları bir dile çeviren kod oluşturma aracı sınıfı.

İ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 sarmalamadan önceki maksimum uzunluğu. Girintileme düzeyini dikkate almaz.
definitions_ protected { [anahtar: dize]: string; } Koddan önce yazdırılacak tanımlar sözlüğü.
forBlock Kayıt<dize, (engelleme: Engelle, oluşturucu: bu) => [dize, sayı] | dize | null>

Blok türüne göre anahtarlanan blok oluşturucu işlevleri sözlüğü. Her blok oluşturucu işlevi iki parametre alır:

- kod oluşturulacak Blok ve - işlev, aşağıda tanımlanan yöntemleri (ör. blockToCode) veya ilgili alt sınıfta (ör. JavascripGenerator) çağırabilmesi için çağıran CodeGenerator (veya alt sınıf) örneğidir.

ve şunu döndürür:

- [kod, öncelik] bileşeni (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 verilmemesi 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 bir şekilde görünebilecek yasal bir kod olmamalı ve normal ifade ayrıştırıcısını karıştırmamalıdır.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [anahtar: dize]: string; } Tanımlar_ içindeki istenen işlev adlarını gerçek işlev adlarıyla eşleyen bir sözlük (kullanıcı işlevleriyle çakışmaları önlemek için).
TAKİP 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 | boş Sonsuz döngülere neden olma riski taşıyan konumlara yerleştirilen rastgele kod. Tüm "%1" örnekleri başarısız olan engelleme kimliğiyle değiştirilir. Ör. checkTimeout(%1);\n
isInitialized boole | boş Başlatma yönteminin çağrılıp çağrılmadığını belirtir. Bu işareti oluşturduktan sonra false (yanlış) ve init (başlatma) değerine ayarlayan oluşturucular, oluşturucu başlatılmamışsa blockToCode'un uyarı yayınlamasına 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ını içeren bir veritabanı.
ORDER_OVERRIDES numara[][] Parantez GEREKMEYEN dış iç eşlemelerin listesi.
RESERVED_WORDS_ protected dize Ayrılmış kelimelerin virgülle ayrılmış listesi.
STATEMENT_PREFIX dize | boş Her ifadeden önce eklenecek rastgele kod. Tüm "%1" örnekleri yerine, ifadenin blok kimliği gelir. Ör. highlight(%1);\n
STATEMENT_SUFFIX dize | boş Her ifadeden sonra eklenecek rastgele kod. Tüm "%1" örnekleri yerine, ifadenin blok kimliği gelir. Ör. highlight(%1);\n

Yöntemler

Yöntem Değiştiriciler Açıklama
addLoopTrap(branch, block) Döngünün içeriğine sonsuz döngü tuzağı ekleyin. Döngü blokunun başına (döngü ifadesi yürütüldükten hemen sonra) ifade soneki ve döngü ifadesinin sonuna bir ifade öneki ekleyin (döngü ifadesinin yürütülmesinden hemen önce).
addReservedWords(words) Bu dil için ayrılmış kelimeler listesine bir veya daha fazla kelime ekleyin.
allNestedComments(block) Bloklardan oluşan bir ağacı tekrar tekrar gözden geçirerek tüm yorumları ekrana getirir.
blockToCode(block, opt_thisOnly) Belirtilen blok (ve ekli bloklar) için kod oluşturur. Bu işlev çağrılmadan önce oluşturucunun başlatılması gerekir.
finish(kod) Kod oluşturma işleminin sonunda çalıştırılacak kod için kanca. Alt sınıflar bunu geçersiz kılabilir, ör. kullanabilirsiniz.
getProcedureName(name) Kullanıcı tanımlı bir prosedür için benzersiz, yasal ad alır. Bu yöntem çağrılmadan önce, sınıfın nameDB_ özelliğinin önceden başlatılmış olması gerekir. Bu işlem genellikle kod oluşturma aracı sınıfının init işleviyle gerçekleştirilir.
getVariableName(nameOrId) Kullanıcı tanımlı bir değişken için benzersiz, yasal ad alır. Bu yöntem çağrılmadan önce, sınıfın nameDB_ özelliğinin önceden başlatılmış olması gerekir. Bu işlem genellikle kod oluşturma aracı sınıfının init işleviyle gerçekleştirilir.
init(_workspace) Kod oluşturma işlemi başlamadan önce çalıştırılacak kod kancası. Alt sınıflar bunu geçersiz kılabilir, ör. veritabanını ilk kullanıma hazırlayın.
injectId(msg, block) "%1" yerine bir iletiye engelleme kimliği ekleyin. STATEMENT_PREFIX, STATEMENT_SUFFIX ve INFINITE_LOOP_TRAP için kullanılır.
prefixLines(text, prefix) Her kod satırına ortak bir önek ekleyin. Kodun girintisini artırmak veya yorum işaretçileri eklemek için tasarlanmıştır.
enablingFunction_(desiredName, kod)

Oluşturulan koda dahil edilecek geliştirici tarafından tanımlanan bir işlev tanımlayın (kullanıcı tanımlı prosedürler değil). Özel yardımcı işlevleri oluşturmak için kullanılır. Bu öğe, belirli birİstenenName ile ilk kez çağrıldığında, kod kaydedilir ve gerçek bir ad oluşturulur. İstenilen aynı ada sahip olan sonraki çağrıların herhangi bir etkisi yoktur ancak dönüş değeri aynı olur.

Aynı istenenName'in farklı yardımcı işlevler için kullanılmadığından emin olmak arayan kişiye bağlıdır (ör. "rastgele" yerine "colourRandom" ve "listRandom" kullanın). Ayrılmış kelimelerin veya kullanıcı tanımlı değişken veya prosedür adlarıyla çakışma riski yoktur.

CodeGenerator.finish() çağrıldığında kod çıkışı alır.

scrub_(_block, kod, _opt_thisOnly) Bloklardan kod oluşturmaya yönelik genel görevler. Bu, blockToCode'dan çağrılır ve yalnızca üst düzey bloklarda değil, her blokta çağrılır. Alt sınıflar bunu geçersiz kılabilir, ör. kullanın.
scrubNakedValue(line) Açık değerler, hiçbir şeye eklenmemiş çıkışlara sahip üst düzey bloklardır. Alt sınıflar bunu geçersiz kılabilir, ör. Çıplak değerlere izin vermiyorsa çok daha iyi olur.
statementToCode(block, name) Adlandırılmış ifade girişine eklenmiş blokları temsil eden bir kod dizesi oluşturun. Kodu girintileyin. Bu genellikle jeneratörlerde kullanılır. Değerlendirme için kod oluşturmaya çalışırken workspaceToCode veya blockToCode kullanma.
valueToCode(block, name, outerOrder) Belirtilen değer girişini temsil eden kod oluşturur.
workspaceToCode(workspace) Çalışma alanındaki tüm bloklar için belirtilen dilde kod oluşturun.