Класс CodeGenerator
Класс генератора кода, который переводит блоки на язык.
Подпись:
export declare class CodeGenerator
Конструкторы
Конструктор | Модификаторы | Описание |
---|---|---|
(конструктор)(имя) | Создает новый экземпляр класса CodeGenerator . |
Характеристики
Свойство | Модификаторы | Тип | Описание |
---|---|---|---|
COMMENT_WRAP | число | Максимальная длина комментария перед переносом. Не учитывает уровень отступов. | |
определения_ | protected | { [ключ: строка]: строка; } | Словарь определений, который будет напечатан перед кодом. |
forBlock | Запись<строка, (блок: Блок , генератор: это) => [строка, число] | строка | ноль> | Словарь функций генератора блоков, сгруппированный по типу блока. Каждая функция генератора блоков принимает два параметра: - Блок для генерации кода и - вызывающий экземпляр CodeGenerator (или подкласса), чтобы функция могла вызывать методы, определенные ниже (например, BlockToCode) или в соответствующем подклассе (например, JavascripGenerator), и возвращает: - кортеж [код, приоритет] (для блоков значений/выражений), или - строка, содержащая сгенерированный код (для блоков операторов), или - значение null, если для блока не должен быть выдан код. | |
FUNCTION_NAME_PLACEHOLDER_ | нить | Используется в качестве заполнителя в функциях, определенных с помощью CodeGenerator.provideFunction_. Это не должен быть допустимый код, который может законно появиться в определении функции (или комментарии), и он не должен сбивать с толку анализатор регулярных выражений. | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | Регэксп | ||
имена функций_ | protected | { [ключ: строка]: строка; } | Словарь, сопоставляющий желаемые имена функций в определениях с фактическими именами функций (чтобы избежать конфликтов с пользовательскими функциями). |
ОТступ | нить | Метод отступа. По умолчанию используется два пробела, но генераторы языка могут переопределить это, чтобы увеличить отступ или перейти на табуляцию. | |
INFINITE_LOOP_TRAP | строка | нулевой | Произвольный код для внедрения в места, которые могут вызвать бесконечные циклы. Любые экземпляры «%1» будут заменены идентификатором блока, в котором произошел сбой. Например checkTimeout(%1);\n | |
isInitialized | логическое | нулевой | Был ли вызван метод init. Генераторы, которые устанавливают для этого флага значение false после создания и значение true в init, заставят блокToCode выдать предупреждение, если генератор не был инициализирован. Если этот флаг не трогать, он не будет иметь никакого эффекта. | |
имя_ | нить | ||
имяDB_? | Имена | (Необязательно) База данных имен переменных и процедур. | |
ORDER_OVERRIDES | число[][] | Список пар внешний-внутренний, для которых НЕ требуются круглые скобки. | |
RESERVED_WORDS_ | protected | нить | Список зарезервированных слов, разделенных запятыми. |
STATEMENT_PREFIX | строка | нулевой | Произвольный код для внедрения перед каждым оператором. Любые экземпляры «%1» будут заменены идентификатором блока инструкции. Например, highlight(%1);\n | |
STATEMENT_SUFFIX | строка | нулевой | Произвольный код для внедрения после каждого оператора. Любые экземпляры «%1» будут заменены идентификатором блока инструкции. Например, highlight(%1);\n |
Методы
Метод | Модификаторы | Описание |
---|---|---|
addLoopTrap(ветвь, блок) | Добавьте ловушку бесконечного цикла к содержимому цикла. Добавьте суффикс инструкции в начале блока цикла (сразу после выполнения инструкции цикла) и префикс инструкции в конце блока цикла (сразу перед выполнением инструкции цикла). | |
addReservedWords(слова) | Добавьте одно или несколько слов в список зарезервированных слов для этого языка. | |
allNestedComments (блок) | Рекурсивно просматривайте дерево блоков, возвращая все их комментарии. | |
blockToCode (блок, opt_thisOnly) | Сгенерировать код для указанного блока (и прикрепленных блоков). Генератор должен быть инициализирован перед вызовом этой функции. | |
закончить (код) | Перехватчик для запуска кода в конце генерации кода. Подклассы могут переопределить это, например, добавив к сгенерированному коду операторы импорта или определения переменных. | |
getProcedureName (имя) | Получает уникальное допустимое имя для определяемой пользователем процедуры. Перед вызовом этого метода свойство nameDB_ класса должно быть уже инициализировано. Обычно это делается в функции init класса генератора кода. | |
getVariableName(nameOrId) | Получает уникальное допустимое имя для определяемой пользователем переменной. Перед вызовом этого метода свойство nameDB_ класса должно быть уже инициализировано. Обычно это делается в функции init класса генератора кода. | |
инициализация (_workspace) | Перехватчик для запуска кода до начала генерации кода. Подклассы могут переопределить это, например, для инициализации базы данных имен переменных. | |
injectId (сообщение, блок) | Вставьте идентификатор блока в сообщение, чтобы заменить «%1». Используется для STATEMENT_PREFIX, STATEMENT_SUFFIX и INFINITE_LOOP_TRAP. | |
prefixLines(текст, префикс) | Добавьте общий префикс к каждой строке кода. Предназначен для отступов кода или добавления маркеров комментариев. | |
обеспечитьФункция_(желаемоеИмя, код) | Определите определяемую разработчиком функцию (а не определяемую пользователем процедуру), которая будет включена в сгенерированный код. Используется для создания частных вспомогательных функций. При первом вызове с заданным желаемым именем код сохраняется и генерируется фактическое имя. Последующие вызовы с тем же желаемым именем не имеют никакого эффекта, но имеют то же возвращаемое значение. Вызывающая сторона должна убедиться, что одно и то же желаемое имя не используется для разных вспомогательных функций (например, используйте «colorRandom» и «listRandom», а не «random»). Нет опасности столкновения с зарезервированными словами, именами пользовательских переменных или процедур. Код получает вывод при вызове CodeGenerator.finish(). | |
Scrub_(_block, code, _opt_thisOnly) | Общие задачи по генерации кода из блоков. Это вызывается из blockToCode и вызывается для каждого блока, а не только для блоков верхнего уровня. Подклассы могут переопределить это, например, для генерации кода для операторов, следующих за блоком, или для обработки комментариев для указанного блока и любых связанных блоков значений. | |
скрабNakedValue (строка) | Голые значения — это блоки верхнего уровня с выходами, которые ни к чему не подключены. Подклассы могут переопределить это, например, если их язык не допускает голых значений. | |
операторToCode(блок, имя) | Сгенерируйте строку кода, представляющую блоки, прикрепленные к входным данным именованного оператора. Сделайте отступ в коде. В основном используется в генераторах. При попытке сгенерировать код для оценки обратите внимание на использование WorkspaceToCode или BlockToCode. | |
valueToCode (блок, имя, внешний порядок) | Сгенерируйте код, представляющий указанное входное значение. | |
WorkspaceToCode (рабочая область) | Сгенерируйте код для всех блоков в рабочей области на указанном языке. |