覆盖ANTLR解析器类中的rule_return类

时间:2016-01-19 12:04:26

标签: java parsing antlr antlr3

我想更改生成的返回类的getTree()方法的定义,如 statement_return (参见下面的示例)。请参阅下面的示例解析器语法并尊重生成的代码,其中包括statement()和statement_return()。

解析器语法

options {
    output          = AST;
}

statement
    :   rule*  
       -> ^(STATEMENT rule* )
   ;

生成树分析器

    public static class statement_return extends ParserRuleReturnScope {
        Object tree;

        public Object getTree() {
            return tree;
        }
    };


    public final Grammar.statement_return statement() throws RecognitionException {
           ...
           ...
    }

我想更改生成的类的getTree()方法的定义,如 statement_return ,其中PLSQLTree(扩展CommonTree)是自定义对象。我有自定义的treeAdoptor,它创建了PLSQLTree类型对象,我想捕获TREE PARSER中所需的每个解析器规则的开始和结束标记。我希望语法中的所有规则都一样。

我的首要定义

    public static class statement_return extends ParserRuleReturnScope {
        Object tree;

        public Object getTree() {
            /*
             start - Add some code in generated class 
            */
              PLSQLTree plsqlTree = (PLSQLTree) tree;

              Token start = this.start;
              plsqlTree.params.put(ParserConstants.START_TOKEN, start);
              Token stop = this.stop;
              plsqlTree.params.put(ParserConstants.STOP_TOKEN, stop);

            /*
             end - Add some code in generated class 
            */
            return plsqlTree;
        }
    };

请帮助我如何实现这一目标?

0 个答案:

没有答案