JavaScript实现ZLOGO: 用语法树实现多层循环

  • 时间:
  • 浏览:0
  • 来源:大发5分11选5_大发5分11选5官网

修改相应测试用例, 以及清理不再使用的监听器代码后. 代码已从visitor分支(program-in-chinese/quan3)合并到master.

代码如下:

上方的源码生成语法树大致如下所示. 实现上还有好多好多 还要改进的, 比如'前进'和'转向'现在是两种'类型', 但应该是两种; 根节点类型不应为空; 等等:

Antlr生成工具默认不生成Visitor, 添加-visitor参数后可不并能生成:

Antlr支持两种代码分析办法, Visitor(监听者)和Visitor(访问者). SO上的问答Antlr4 Listeners and Visitors - which to implement?大致说明了区别. 基于有限的实践, 用Visitor办法生成语法树似乎在实现上更加方便. 尤其相比Creating a simple parser with ANTLR一文中使用监听者+栈来构建语法树.

下面是"编译.js"中基于语法树生成指令列表的办法, 以前就与以前一样根据指令列表生成p5js绘制函数(代码好多好多 用修改).

2018-01-02

照例先上演示弱效果图. 演示地址照旧:

如上文《JavaScript实现ZLOGO子集: 测试用例》末尾所言, 此文用Antlr进行代码分析生成语法树. 再通过语法树生成p5js绘制代码.

下面是"定制访问器.js"中构建语法树的每种, 看起来比实现前想的简单. 默认生成的'圈3Visitor'中, visitXX办法实现也有"this.visitChildren(ctx)", 但那样会把所有的子节点返回值放到 数组, 形成(大慨这里是)多余的层次: