如何替换节点文本(ANLR,AST)

时间:2011-07-15 07:57:45

标签: c# antlr transformation abstract-syntax-tree

使用ANTLR(AST,C#)转换源

我正在尝试将源文本转换为“/// Text here(trace)”替换为“WriteLog(modulename,functionname,trace,'Text here');”

所以我想替换nodetext

for (int i = 0; i < Tree.ChildCount; i++){
   if (Tree.GetChild(i).Text == NODE_LOGGING)
       Tree.GetChild(i).GetChild(0).Text = MyReplace(Tree.GetChild(i).GetChild(0).Text);
   else ....

}

但属性Text是只读的,所以它不起作用。 是否可以更改节点文本,然后获得修改后的源文本或希望这种方式?

1 个答案:

答案 0 :(得分:0)

在Java中,CommonTree的String getText()方法仅返回关联的标记文本:

public String getText() {
    if ( token==null ) {
        return null;
    }
    return token.getText();
}

要获取令牌,您可以调用CommonTree的Token getToken()并通过令牌的void setText(String text)设置令牌文本。