Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将隐藏通道中的注释添加到树时出现ANTLR4问题_Antlr_Antlr4 - Fatal编程技术网

将隐藏通道中的注释添加到树时出现ANTLR4问题

将隐藏通道中的注释添加到树时出现ANTLR4问题,antlr,antlr4,Antlr,Antlr4,我正在将隐藏通道中的注释添加回树中。 我使用stream.getHiddenTokensToRight完成这项工作,并将子项(注释标记)添加回来。 但是我需要隐藏的注释标记节点位于另一个父节点下(比如“注释”)。“Comments”节点将被添加到主树中,其子节点将是隐藏的commenttoken节点。这怎么可能?我可以创建一个新节点吗?或者用修改过的文本复制隐藏的注释标记?当然可以。您可以将树修改为您想要的任何内容。我愿意。严格来说,它不是由Antlr解析器在此时生成的解析树。但是,我建议您维护

我正在将隐藏通道中的注释添加回树中。 我使用stream.getHiddenTokensToRight完成这项工作,并将子项(注释标记)添加回来。
但是我需要隐藏的注释标记节点位于另一个父节点下(比如“注释”)。“Comments”节点将被添加到主树中,其子节点将是隐藏的commenttoken节点。这怎么可能?我可以创建一个新节点吗?或者用修改过的文本复制隐藏的注释标记?

当然可以。您可以将树修改为您想要的任何内容。我愿意。严格来说,它不是由Antlr解析器在此时生成的解析树。但是,我建议您维护一个不变量,例如,如果您序列化修改树的边界,则序列化的解析与修改之前的Antlr解析树相同。此外,一些遍历程序使用位置数据而不是类型数据来访问子对象。因此,修改后的解析树可能会破坏这些树遍历例程。@kaby76谢谢您的回复。你有这样做的例子吗?我找不到任何可以完全添加新节点或复制节点的示例。在复制一个节点时,如果我修改了一个节点,另一个节点也会被修改(可能是由于按引用传递而不是按值传递的概念)。任何例子都会很有帮助。对不起,我没有任何简单的、自成一体的例子。我在中修改了Antlr语法本身的解析树。我不确定如何复制树节点,但是在深度拷贝中有很多要考虑的问题。看见