是否有任何方法可以复制隔膜?我需要一个真正的深副本,因此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
,以创建该节点的深副本。