我创建了一个小机器人,例如基于 javascript的 Karel 机器人(维基百科)。
机器人可以通过一些简单的命令来控制,例如“前进”、“右转”等。
用户可以编写一个javascript程序来控制机器人,然后通过javascripts“eval()”函数使机器人移动。
问题是我希望机器人慢慢移动,这样你就可以看到他在做什么,这样你就可以在编辑器中突出显示当前的代码行。
当前方法:解析
目前我已经解决了这个问题(在离线版本中),方法是解析文本区域中的每一行,然后构建一个动作堆栈,然后使用 window.setTimeout 一个接一个地执行。但这当然是有限的,因为我必须为每个小的 javascript 语言结构编写解析代码,这需要大量工作并且容易出错。
对此的一些附加信息:
解析版本:http ://abi-physik.de/_niki2/niki.php
解析版js代码:http ://abi-physik.de/_niki2/js/niki.js
重要的函数在脚本的底部:run()、execute()
我目前正在逐行解析用户脚本并将操作添加到堆栈中。如果解析器遇到“if”,它将开始一个新堆栈并将所有操作添加到该堆栈。如果解析器随后遇到“}”,它将关闭“if”堆栈并继续向基本堆栈添加操作。
有什么想法可以改进吗?