实现原理
解析blockly语法树,使用js管理状态,实际使用lua执行,c/c++函数调用使用lua调用c/c++函数的能力
可以单行执行
已实现if功能
TODO
for循环功能 函数功能
单步执行效果图
直接执行效果图
源代码
//0 暂停 1 单步执行 2 断点
//创建枚举
var AstStatus = {PAUSE : 0,STEP :1,BREAK : 2,PASS:3
}class ASTInterpreter {constructor(ast,funcs) {//执行状态,暂停 单步执行 断点this.status = AstStatus.STEP;//当前节点this.currentBlock = null;this.ast = ast;this.variables = {};this.userFuns={};this.functions=new Set();this.initVariables();this.initFunc(funcs);this.callback=console.log}addEventCallback(func){this.callback=func}initFunc(funcs){for (let item of funcs) {this.addFunction(item)}}initVariables() {let vars = this.ast.variables;for (let i = 0; i < vars.length; i++) {const varDef = vars[i];const varId = varDef.id;const varName = varDef.name;this.variables[varId] = varName;}}stepFunc(){this.executeBlock(this.currentBlock)}addFunction(key) {this.functions.add(key);}getBlockType(block){let type = block.typeif(this.functions.has(type)){//说明是自定义函数return 'function'}else{return type}}execute() {if (this.ast && this.ast.blocks && this.ast.