有没有办法复制ParserRule?我需要一个真正的深层副本,因此copyFrom()不能解决问题。或者我必须重新解析代码吗?
如何解决以下问题的另一个想法也将非常感激:
我正在研究编译器,将旧的遗留代码翻译成现代编程语言,在本例中为EGL - > Java的。 EGL有一个名为Standalone Function的概念,它类似于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;
答案 0 :(得分:2)
从版本4.2开始,ANTLR 4在解析完成后不包含任何用于操作解析树结构的API。这是我们目前正在探索的领域,特别是考虑到新模式匹配语法创建的可能性。
对于复制树,我建议您实现生成解析器时创建的访问者界面。这将允许您在解析树中的任何节点上调用visit
来创建该节点的深层副本。