从Own类继承而不是从XMLParserRuleContext继承

时间:2013-03-04 09:09:53

标签: antlr4

我使用'visitor'模式从我的解析代码生成XML。在典型的上下文类看起来像:

public static class On_dtmContext extends ParserRuleContext {
    public List<FieldContext> field() {
        return getRuleContexts(FieldContext.class);
    }
    public TerminalNode ON() { return getToken(SRC_REP_SCREENParser.ON, 0); }
    public On_dtm_headerContext on_dtm_header() {
        return getRuleContext(On_dtm_headerContext.class,0);
    }
.....
}

我使用RuleContext的'getText'成员函数访问我的访问者回调函数中的元素。 我想编写一个继承自'ParserRuleContext'并重载'getText'的类,以替换像'&lt;'这样的字符。或'&gt;'用他们的xml转义序列。有没有办法让我的代码生成并让上下文类继承自我的类,如:

public static class On_dtmContext extends XMLParserRuleContext {
    public List<FieldContext> field() {
        return getRuleContexts(FieldContext.class);
    }
    public TerminalNode ON() { return getToken(SRC_REP_SCREENParser.ON, 0); }
    public On_dtm_headerContext on_dtm_header() {
        return getRuleContext(On_dtm_headerContext.class,0);
    }
.....
}

感谢您的帮助! 亲切的问候,狼

1 个答案:

答案 0 :(得分:0)

你有没有理由扩展这个类,而不是在你的语法中创建一个解析器规则来捕获<>,以便你可以在它们发生时进行翻译?

解析器规则看起来像:

lessThan
    : '<'
    ;

greaterThan
    : '>'
    ;

此时,您将拥有每个条款的特定访问者,并可以按照您的意愿进行翻译。