我怎么能取代节点文本(ANLR, AST)

本文关键字:ANLR AST 文本 怎么能 取代 节点 | 更新日期: 2023-09-27 18:02:15

使用ANTLR (AST, c#)转换源代码

我正在尝试将源文本替换为"///text here (trace)"为"WriteLog(模块名,功能名,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属性是只读的,所以它不起作用。是否有可能改变节点文本,然后得到修改后的源文本,或者那样是有希望的?

我怎么能取代节点文本(ANLR, AST)

在Java中,CommonTree的stringgettext()方法只返回关联的令牌文本:

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

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