blockly > CodeGenerator

CodeGenerator sınıfı

Blokları dile çeviren bir 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ı Sarmalamadan önce bir yorum için maksimum uzunluk. 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 fonksiyonlarının sözlüğü. Her blok oluşturucu işlevi iki parametre alır:

- Kod oluşturmak için kullanılan Blok ve - CodeGenerator (veya alt sınıf) örneği için çağrı; böylece işlev aşağıda tanımlanan yöntemleri (ör. blockToCode) veya ilgili alt sınıfta (ör. JavascripGenerator) çağırabilir,

ve iade eder:

- bir [kod, öncelik] demeti (değer/ifade blokları için) veya oluşturulan kodu içeren bir dize (ifade blokları için) ya da blok için hiçbir kod yayınlanmaması gerekiyorsa null.

FUNCTION_NAME_PLACEHOLDER_ dize Bu, CodeGenerator.provideFunction_ aracılığıyla 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 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; } Tanım_ içindeki istenen işlev adlarını gerçek işlev adlarıyla eşleyen (kullanıcı işlevleriyle çakışmaları önlemek için) bir sözlük.
TALEP 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 engelleme kimliğiyle değiştirilir. Ör. checkTimeout(%1);\n
isInitialized boolean | null Başlatma yönteminin çağrılıp çağrılmadığı. Oluşturulduktan sonra bu işareti false (yanlış) ve init'te true (doğru) değerine ayarlayan jeneratörler, oluşturucu başlatılmadıysa blockToCode'un bir uyarı yayınlamasına neden olur. Bu bayrağa dokunulmazsa herhangi 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ış iç çiftlerin listesi.
RESERVED_WORDS_ protected dize Ayrılmış kelimelerin virgülle ayrılmış listesi.
STATEMENT_PREFIX dize | null Her ifadeden önce yerleştirilecek 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 ve döngü bloğunun sonuna (döngü ifadesi yürütülmeden hemen önce) bir ifade ön eki ekleyin.
addReservedWords(words) Bu dil için ayrılmış kelimeler listesine bir veya daha fazla kelime ekleyin.
allNestedComments(block) Bloklardan oluşan bir ağacı yinelemeli şekilde örümcekler ve tüm yorumları döndürür.
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şturulduktan sonra kodun çalıştırılması için bağlantı kurun. Alt sınıflar bunu geçersiz kılabilir (ör. 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 işlem 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 işlem 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ı için bağlantı kurun. Alt sınıflar bunu geçersiz kılabilir (ör. değişken adları veritabanını başlatmak için).
injectId(mesaj, engelle) Bir iletiye "%1" yerine engelleme 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. Kod girintisi 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. Özel yardımcı işlevleri oluşturmak için kullanılır. Bu işlev, belirli bir istenenAd ile ilk kez çağrıldığında, kod kaydedilir ve gerçek bir ad oluşturulur. Aynı requestName değerine sahip sonraki çağrıların hiçbir etkisi yoktur ancak aynı dönüş değerine sahiptir.

Aynı requestName'in farklı yardımcı işlevler için kullanılmadığından emin olmak (ör. "random değil" "colourRandom" ve "listRandom" kullanın) arayana bağlıdır. Ayrılmış kelimeler, kullanıcı tanımlı değişken veya prosedür adları ile çarpışma riski yoktur.

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

scrub_(_block; kod; _opt_thisOnly) protected Bloklardan kod oluşturmayla ilgili genel görevler. Bu, blockToCode'dan 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. bloku izleyen ifadeler için kod oluşturmak veya belirtilen blok ve bağlı değer blokları için yorumları işlemek için).
scrubNakedValue(line) Açık değerler, çıkışları hiçbir şeye eklenmemiş ü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. Koda girinti ekleyin. Bu genellikle jeneratörlerde 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.