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. |