CodeGenerator 类
此类代码生成器可将代码块转换为语言。
Signature:
export declare class CodeGenerator
构造函数
构造函数 | 修饰符 | 说明 |
---|---|---|
(构造函数)(名称) | 构造 CodeGenerator 类的新实例 |
属性
属性 | 修饰符 | 类型 | 说明 |
---|---|---|---|
COMMENT_WRAP | number | 封装前的注释的长度上限。不考虑缩进级别。 | |
definitions_ | protected |
{ [键: 字符串]: 字符串;} | 要在代码之前输出的定义字典。 |
forBlock | Record<string, (block: Block, generator: this) =>[字符串, 数字] |字符串 |null> | 块生成器函数的字典,按块类型键。每个块生成器函数都接受两个参数: - 要为之生成代码的块,以及 - 调用的 CodeGenerator(或子类)实例,以便函数可以调用下面定义的方法(如 blockToCode)或相关子类(如 JavascripGenerator)上的方法, 并返回: - [代码,优先级] 元组(对于值/表达式块),或 - 包含生成的代码的字符串(对于语句块),或者 - 如果不应为块发出任何代码,则返回 null。 |
|
FUNCTION_NAME_PLACEHOLDER_ | 字符串 | 它在使用 CodeGenerator.provideFunction_ 定义的函数中用作占位符。它不能是可以合法出现在函数定义(或注释)中的合法代码,并且不能混淆正则表达式解析器。 | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [键: 字符串]: 字符串;} | 将定义中所需的函数名称映射到实际函数名称的字典(以避免与用户函数冲突)。 |
缩进 | 字符串 | 缩进方法。默认为两个空格,但语言生成器可能会覆盖此设置,以增加缩进或改用制表符。 | |
INFINITE_LOOP_TRAP | 字符串 |null | 注入到可能会导致无限循环的位置的任意代码。任何“%1”实例将会被替换为失败的块 ID。例如 checkTimeout(%1);\n |
|
isInitialized | 布尔值 |null | 是否已调用 init 方法。如果生成器在创建后将此标志设置为 false 并在 init 中设置为 true,则会导致 blockToCode 针对生成器尚未初始化而发出警告。如果不更改此标志,则不会产生任何影响。 | |
name_ | 字符串 | ||
nameDB_? | 名称 | (可选)包含变量和过程名称的数据库。 | |
ORDER_OVERRIDES | 编号 [][] | 不需要括号的外部内部对的列表。 | |
RESERVED_WORDS_ | protected |
字符串 | 以英文逗号分隔的保留字词列表。 |
STATEMENT_PREFIX | 字符串 |null | 要在每个语句之前注入的任意代码。任何“%1”实例将替换为语句的块 ID。例如 highlight(%1);\n |
|
STATEMENT_SUFFIX | 字符串 |null | 在每个语句后注入的任意代码。任何“%1”实例将替换为语句的块 ID。例如 highlight(%1);\n |
方法
方法 | 修饰符 | 说明 |
---|---|---|
addLoopTrap(branch, block) | 向循环内容添加无限循环陷阱。在循环块的开头(紧接在执行循环语句后)添加语句后缀,在循环块的末尾(紧挨着执行循环语句之前)添加语句前缀。 | |
addReservedWords(words) | 向该语言的保留字词列表中添加一个或多个字词。 | |
allNestedComments(block) | 以递归方式抓取一堆积木,返回其所有注释。 | |
blockToCode(block, opt_thisOnly) | 为指定代码块(以及附加的代码块)生成代码。在调用此函数之前,必须初始化生成器。 | |
finish(code) | 在代码生成结束时运行的代码的钩子。子类可能会覆盖此方法,例如在生成的代码前面附加 import 语句或变量定义。 | |
getProcedureName(name) | 获取用户定义的过程的唯一法定名称。在调用此方法之前,必须已初始化类的 nameDB_ 属性。这通常在代码生成器类的 init 函数中完成。 |
|
getVariableName(nameOrId) | 获取用户定义的变量的唯一合法名称。在调用此方法之前,必须已初始化类的 nameDB_ 属性。这通常在代码生成器类的 init 函数中完成。 |
|
init(_workspace) | 在代码生成开始之前要运行的代码的钩子。子类可能会覆盖此方法,例如初始化变量名称数据库。 | |
injectId(msg, block) | 将块 ID 注入消息以替换“%1”。用于 STATEMENT_PREFIX、STATEMENT_SUFFIX 和 INFINITE_LOOP_TRAP。 | |
prefixLines(text, prefix) | 在每行代码的前面附加一个通用前缀。用于缩进代码或添加注释标记。 | |
provideFunction_(desiredName, 代码) | 定义要包含在生成的代码中的开发者定义的函数(而非用户定义的过程)。用于创建私有辅助函数。首次使用给定的 requiredName 调用此方法时,系统会保存代码并生成实际名称。具有相同 requiredName 的后续调用不会产生任何影响,但具有相同的返回值。 调用方应确保不同的辅助函数没有使用相同的 requiredName(例如,使用“colourRandom”和“listRandom”,而非“random”)。不会与保留字、用户定义的变量或过程名称发生冲突。 调用 CodeGenerator.finish() 时,代码会输出。 |
|
scrub_(_block, code, _opt_thisOnly) | 根据代码块生成代码的常见任务。这将通过 blockToCode 调用,并在每个代码块(而不仅仅是顶级代码块)上调用。子类可能会覆盖此方法,例如来为 块后面的语句生成代码,或处理指定块和任何连接值块的注释。 | |
scrubNakedValue(line) | 裸值是输出未插入任何内容的顶级块。子类可能会覆盖此方法,例如如果所用语言不允许使用裸值,则会发生该错误。 | |
statementToCode(block, name) | 生成一个代码字符串,表示附加到命名语句输入的块。缩进代码。这主要用于生成器。尝试生成评估代码时,请查看使用 workspaceToCode 或 blockToCode。 | |
valueToCode(block, name, outerOrder) | 生成表示指定值输入的代码。 | |
workspaceToCode(workspace) | 为工作区中的所有块生成指定语言的代码。 |