1

我的语法包含生产代码。真的可以将其与访客混合吗?(我的问题是实现 if cond then block endif )

在性能方面,语法中的生产代码与访问者之间有区别吗?(我必须在 Javascript 目标的浏览器中每秒重新评估几个程序 30-60 次。我理解直接生产代码更接近编译代码,但也许我错了)。

4

1 回答 1

1

所示类型的操作仅影响解析树的内容——e将创建一个上下文节点,其返回字段具有操作计算值。因此,随后与访问者一起走分析树是没有障碍的。

使用访问者(不使用嵌入式操作)可以获得相同的最终结果。

使用访问者会产生一些开销 - 不可能在没有测试的情况下说它是否重要(使用 Java/Antlr 运行时,在相当长的源文本上评估具有多个步行者的相对复杂的语法,在温暖的环境中平均需要 3 毫秒 - YMWV )。

于 2015-08-04T21:07:36.830 回答