Klasa CodeGenerator
Klasa na temat generatora kodu tłumaczącego bloki 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 pakowaniem. Nie uwzględnia poziomu wcięcia. | |
definitions_ | protected |
{ [klucz: ciąg]: ciąg; } | Słownik definicji do wydrukowania przed kodem. |
forBlock | Record<string, (block: Block, generator: this) => [string, number] | string | null> | Słownik funkcji generatora bloków posortowany według typu bloku. Każda funkcja generatora bloków przyjmuje dwa parametry: – blok do generowania kodu dla instancji CodeGenerator (lub podklasa), aby funkcja mogła wywoływać metody zdefiniowane poniżej (np. blockToCode) albo w odpowiedniej podklasie (np. JavascripGenerator), i zwraca: – krotkę [kod, pierwszeństwo] (dla bloków wartości/wyrażeń) lub - ciąg tekstowy zawierający wygenerowany kod (w przypadku bloków instrukcji) albo - null, jeśli do bloku nie powinien zostać wysłany żaden kod. |
|
FUNCTION_NAME_PLACEHOLDER_ | ciąg znaków | Jest on używany jako symbol zastępczy w funkcjach zdefiniowanych za pomocą CodeGenerator.provideFunction_. Nie może to być kod prawny, który zgodnie z prawem może się pojawiać w definicji funkcji (lub komentarza) i nie może mylić parsera wyrażeń regularnych. | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [klucz: ciąg]: ciąg; } | Słownik mapujący wybrane nazwy funkcji w definicjach_ na rzeczywiste nazwy funkcji (aby uniknąć kolizji z funkcjami użytkownika). |
CZĘSTOTLIWOŚĆ PUBLIKOWANIA | ciąg znaków | Metoda wcięcia. Domyślnie są to 2 spacje, ale generatory języków mogą je zastąpić, aby zwiększyć wcięcie lub zmienić znaki tabulacji. | |
INFINITE_LOOP_TRAP | string | null | Dowolny kod do wstrzyknięcia w miejsca, które mogą spowodować zapętlenie. Wszystkie wystąpienia „%1” zostaną zastąpione identyfikatorem bloku, który nie zadziałał. Na przykład: checkTimeout(%1);\n |
|
isInitialized | boolean | null | Określa, czy metoda init została wywołana. Generatory, które po utworzeniu ustawią tę flagę na false, i true w init, spowodują wygenerowanie ostrzeżenia blockToCode, jeśli generator nie został zainicjowany. Jeśli ta flaga nie zostanie zmieniona, nie spowoduje to żadnych zmian. | |
name_ | ciąg znaków | ||
nameDB_? | Nazwy | (Opcjonalnie) Baza danych zawierająca nazwy zmiennych i procedur. | |
ORDER_OVERRIDES | liczba[][] | Lista par zewnętrznych wewnętrznych, które NIE wymagają nawiasów. | |
RESERVED_WORDS_ | protected |
ciąg znaków | 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 (zaraz 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 słów zarezerwowanych w tym języku. | |
allNestedComments(block) | Powtarzające się przewijanie drzewa bloków zwracające wszystkie komentarze. | |
blockToCode(block, opt_thisOnly) | Wygeneruj kod określonego bloku (i dołączonych bloków). Przed wywołaniem tej funkcji generator musi zostać zainicjowany. | |
finish(code) | Aktywuj kod, aby go uruchomić na końcu jego generowania. Podklasy mogą to zastąpić, np. aby poprzedzić wygenerowany kod instrukcjami importu lub definicjami zmiennych. | |
getProcedureName(name) | Pobiera unikalną nazwę prawną procedury zdefiniowanej przez użytkownika. Przed wywołaniem tej metody właściwość nameDB_ klasy musi być już zainicjowana. Zwykle wykonuje 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 wykonuje się to w funkcji init klasy generatora kodu. |
|
init(_workspace) | Uruchamianie kodu przed rozpoczęciem jego generowania. To ustawienie może zastąpić podklasy, np. w celu zainicjowania bazy danych z nazwami zmiennych. | |
injectId(wiadomość, blokowanie) | Wstaw w wiadomości identyfikator bloku, aby zastąpić ciąg „%1”. Używana w przypadku STATEMENT_PREFIX, STATEMENT_SUFFIX 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, kod) | Zdefiniuj funkcję zdefiniowaną przez programistę (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 wybranej nazwie kod zostaje zapisany i generowana jest rzeczywista nazwa. Kolejne wywołania z tą samą wartością o tej samej nazwie nie mają żadnego efektu, ale mają tę samą wartość zwracaną. Od elementu wywołującego zależy to, czy ta sama żądana_nazwa nie jest używana w różnych funkcjach pomocniczych (np. należy użyć zdarzeń „colourRandom” i „listRandom”, a nie „random”). Nie istnieje niebezpieczeństwo kolizji z zarezerwowanymi słowami, zdefiniowanymi przez użytkownika nazwami zmiennych lub procedur. Kod jest zwracany po wywołaniu funkcji CodeGenerator.finish(). |
|
scrub_(_block, code, _opt_thisOnly) | protected |
Typowe zadania generowania kodu z bloków. Jest ona wywoływana z pole blockToCode i wywoływana w przypadku każdego bloku, a nie tylko bloków najwyższego poziomu. Podklasy mogą to zastąpić, np. w celu generowania kodu dla instrukcji następujących po bloku lub obsługi komentarzy dla określonego bloku i wszelkich połączonych bloków wartości. |
scrubNakedValue(line) | Bezwartościowe wartości to bloki najwyższego poziomu z wyjściami, które nie są do niczego podłączone. Podklasy mogą zastąpić to ustawienie, 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 instrukcji. Dodaj wcięcie kodu. Używa się go głównie w generatorach. Gdy próbujesz wygenerować kod do oceny, sprawdź to 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 na wybrany język. |