Klasa CodeGenerator
Klasa generatora kodu do tłumaczenia bloków na język.
Podpis:
export declare class CodeGenerator
Zespoły
Zespół | Modyfikatory | Opis |
---|---|---|
(konstruktor)(nazwa) | Konstruuje nową instancję klasy CodeGenerator |
Właściwości
Właściwość | Modyfikatory | Typ | Opis |
---|---|---|---|
COMMENT_WRAP | Liczba | Maksymalna długość komentarza przed zawijaniem. Nie uwzględnia poziomu wcięcia. | |
definitions_ | protected |
{ [klucz: ciąg]: string; } | Słownik definicji do wydrukowania przed kodem. |
forBlock | Record<string, (block: Block, generator: this) => [string, number] | string | null> | Słownik funkcji generatora bloków, kluczowany według typu bloku. Każda funkcja generatora bloków przyjmuje 2 parametry: – blok do generowania kodu dla instancji CodeGenerator (lub podklasa), który umożliwia wywołanie metod zdefiniowanych poniżej (np. blockToCode) lub w odpowiedniej podklasie (np. JavascripGenerator), i zwraca: - a [kod, pierwszeństwo] (dla bloków wartości/wyrażeń) lub - ciąg zawierający wygenerowany kod (dla bloków instrukcji) lub - null, jeśli nie powinien być wysyłany żaden kod. |
|
FUNCTION_NAME_PLACEHOLDER_ | string, | Jest on używany jako symbol zastępczy w funkcjach zdefiniowanych za pomocą narzędzia CodeGenerator.provideFunction_. Nie może to być kod prawny, który może prawidłowo pojawiać się w definicji funkcji (lub komentarzu), ani nie może mylić parsera wyrażeń regularnych. | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [klucz: ciąg]: string; } | Słownik mapujący żądane nazwy funkcji w definicjach_ na rzeczywiste nazwy funkcji (aby uniknąć kolizji z funkcjami użytkownika). |
ODCH.STANDARDOWE | string, | Metoda wcięcia. Domyślnie są to 2 spacje, ale generatory języków mogą ją zastąpić, aby zwiększyć wcięcie lub przejść na karty. | |
INFINITE_LOOP_TRAP | string | null | Dowolny kod do wstrzykiwania w miejscach, które mogą spowodować zapętlenie nieskończone. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku, którego nie udało się przetworzyć. Na przykład: checkTimeout(%1);\n |
|
isInitialized | boolean | null | Wskazuje, czy metoda init została wywołana. Generatory, które po utworzeniu ustawią tę flagę na false, i prawda w init, spowodują wygenerowanie ostrzeżenia blockToCode, jeśli generator nie został zainicjowany. Jeśli ta flaga nie zostanie zmieniona, nie będzie to miało żadnego efektu. | |
name_ | string, | ||
nameDB_? | Nazwy | (Opcjonalnie) Baza danych zawierająca nazwy zmiennych i procedur. | |
ORDER_OVERRIDES | liczba[][] | Lista zewnętrznych par wewnętrznych, które NIE wymagają nawiasów. | |
RESERVED_WORDS_ | protected |
string, | Rozdzielona przecinkami lista zarezerwowanych słów. |
STATEMENT_PREFIX | string | null | Dowolny kod do wstrzyknięcia przed każdą instrukcją. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku instrukcji. Na przykład: highlight(%1);\n |
|
STATEMENT_SUFFIX | string | null | Dowolny kod do wstrzyknięcia po każdej instrukcji. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku instrukcji. Na przykład: highlight(%1);\n |
Metody
Metoda | Modyfikatory | Opis |
---|---|---|
addLoopTrap(branch, block) | Dodaj pułapkę nieskończonej pętli na zawartość pętli. Dodaj sufiks instrukcji na początku bloku pętli (bezpośrednio po wykonaniu instrukcji pętli) i prefiks instrukcji na końcu bloku pętli (tuż przed wykonaniem instrukcji pętli). | |
addReservedWords(words) | Dodaj co najmniej 1 słowo do listy zarezerwowanych słów w tym języku. | |
allNestedComments(block) | Cyklicznie przesuwaj drzewo bloków, zwracając wszystkie komentarze. | |
blockToCode(block, opt_thisOnly) | Wygeneruj kod określonego bloku (i dołączonych bloków). Przed wywołaniem tej funkcji generator musi się zainicjować. | |
finish(kod) | Dodaj kod do uruchomienia na końcu jego generowania. Podklasy mogą to zastąpić, np. aby dołączyć wygenerowany kod instrukcjami importu lub definicjami zmiennych. | |
getProcedureName(name) | Pobiera unikalną nazwę prawną dla procedury zdefiniowanej przez użytkownika. Przed wywołaniem tej metody właściwość nameDB_ klasy musi być już zainicjowana. Zwykle robi się to w funkcji init klasy generatora kodu. |
|
getVariableName(nameOrId) | Pobiera unikalną nazwę prawną zmiennej zdefiniowanej przez użytkownika. Przed wywołaniem tej metody właściwość nameDB_ klasy musi być już zainicjowana. Zwykle robi się to w funkcji init klasy generatora kodu. |
|
init(_workspace) | Dodaj kod do kodu, aby został uruchomiony przed rozpoczęciem jego generowania. Podklasy mogą to zastąpić, np. aby zainicjować bazę danych z nazwami zmiennych. | |
injectId(wiadomość, blokowanie) | Wstaw w wiadomości identyfikator blokowania, aby zastąpić „%1”. Używana dla STATEMENT_PREFIX, STATEMENT_SUGGESTION i INFINITE_LOOP_TRAP. | |
prefixLines(text, prefix) | Do każdego wiersza kodu dodaj wspólny prefiks. Służy do dodawania wcięć kodu lub dodawania znaczników komentarzy. | |
provideFunction_(desiredName, code) | Zdefiniuj funkcję zdefiniowaną przez programistę (a nie procedurę zdefiniowaną przez użytkownika), która zostanie uwzględniona w wygenerowanym kodzie. Służy do tworzenia prywatnych funkcji pomocniczych. Przy pierwszym wywołaniu z określoną nazwą o określonej nazwie kod zostaje zapisany i generowana jest rzeczywista nazwa. Kolejne wywołania z tą samą wartością parametru o tej samej nazwie nie mają żadnego efektu, ale mają tę samą wartość zwrotną. Od elementu wywołującego zależy to, czy ta sama wartość ({random) nie jest używana w różnych funkcjach pomocniczych (np. w funkcji „colourRandom” i „listRandom”, a nie na „losRandom”). Nie istnieje niebezpieczeństwo kolizji ze słowami zarezerwowanymi, zdefiniowanymi przez użytkownika nazwami zmiennych lub procedur. Kod jest zwracany po wywołaniu funkcji CodeGenerator.finish(). |
|
scrub_(_block, code, _opt_thisOnly) | Typowe zadania generowania kodu z bloków. Parametr ten jest wywoływany przez blockToCode, a także dla wszystkich bloków, a nie tylko bloków najwyższego poziomu. Podklasy mogą to zastąpić, np. w celu wygenerowania kodu dla instrukcji następujących po bloku lub do obsługi komentarzy dla określonego bloku i dowolnych połączonych bloków wartości. | |
scrubNakedValue(line) | Wartości bez przedrostka www to bloki najwyższego poziomu z wyjściami, które nie są do niczego podłączone. W podklasach może to być zastąpienie, np. jeśli ich język nie zezwala na same wartości. | |
statementToCode(block, name) | Wygeneruj ciąg kodu reprezentujący bloki dołączone do danych wejściowych o nazwanej instrukcji. Dodaj wcięcie kodu. Używa się go głównie w generatorach. Próbując wygenerować kod do oceny, sprawdź za pomocą workspaceToCode lub blockToCode. | |
valueToCode(block, name, outerOrder) | Wygeneruj kod reprezentujący podaną wartość. | |
workspaceToCode(workspace) | Wygeneruj kod dla wszystkich bloków w obszarze roboczym w wybranym języku. |