如何复制RuleContext



是否有任何方法可以复制隔膜?我需要一个真正的深副本,因此copyfrom()无法解决问题。还是我必须重新使用代码?

如何解决以下方面的替代想法也将不胜感激:

我正在研究编译器,将旧的旧代码转换为现代编程语言,在这种情况下为EGL-> Java。EGL具有一个称为独立函数的概念,该函数类似于C-Macros。这意味着功能中的代码可以在调用范围中引用符号。因此,定义和解决符号和类型促销都是上下文依赖的。

在antlr3中,我们通过duptree()解决了此问题,然后简单地在每个呼叫范围中进行了一个副本。

动态类型不是选项。

示例(伪代码)说明:

Program A
    int var = 4;
    saf();    # Prints 5 
end A;
Program B
    String var = "abc";
    saf();    # Prints abc1 
end B;
function saf()
    int j = 1;
    print(var + j);
end saf;

从4.2版开始,antlr 4不包括任何用于操纵解析后解析树结构的API。这是我们目前正在探索的领域,尤其是考虑到新模式匹配语法创建的可能性。

对于复制树,我建议您在生成解析器时实现创建的访问者界面。这将使您可以在解析树中的任何节点上调用visit,以创建该节点的深副本。

相关内容

  • 没有找到相关文章

最新更新