# 代码生成总览
代码生成是把工作区中的块转换为可执行代码字符串的过程。
代码生成之所以关键,是因为它让你的块真正“做事”,例如计算表达式、驱动角色移动,或配置应用行为。
块本身不能直接运行,你需要先生成代码字符串,再由应用执行这些代码。
# 语言代码生成器
要生成代码,先要确定目标文本语言。
每种语言都需要自己的语言代码生成器。
语言代码生成器(通常简称代码生成器)是一个类,负责该语言通用但不针对单个块的生成规则,例如:
- 注释格式
- 语句缩进
- 字符串引用方式
Blockly 内置 5 种语言代码生成器:
- JavaScript ES5
- Python 3
- Lua 5.1
- Dart 2
- PHP 7
如果你需要的语言不在列表里,可以自己实现语言代码生成器。
可先参考官方 codelab:Build a custom generator (opens new window)。
# 块代码生成器
每个块负责生成自己的代码。
因此你创建一个块时,需要为每个要支持的目标语言各写一个块代码生成器。
块代码生成器本质是函数,返回该块对应的代码字符串。
例如,比较大小的块可能返回 'a < b',if 语句块可能返回 'if (...) {\n...\n};\n'。
import {javascriptGenerator} from 'blockly/javascript';
import {pythonGenerator} from 'blockly/python';
// 为 JavaScript 和 Python 注册同一个自定义块的块代码生成器。
javascriptGenerator.forBlock['my_custom_block'] = function(block, generator) { /* ... */ };
pythonGenerator.forBlock['my_custom_block'] = function(block, generator) { /* ... */ };
块代码生成器由语言代码生成器调用。
更多可先参考现有页面:生成代码。
# 生成并运行代码
应用可以在任意时机触发代码生成,例如:
- 用户点击“运行”按钮时
- 用户每次改动工作区时
生成代码后,如何执行属于应用层设计,超出 Blockly 本身范围。
可先参考:生成并运行 JavaScript。