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

  • 时间:
  • 浏览:1
  • 来源:uu快3IOS下载_uu快3app下载_和值

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

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

修改相应测试用例, 以及清理不再使用的监听器代码后. 代码已从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