好吧......这就是我想做的事.....ANTLR的Java文件转换为XML并回读XML创建Java对象发行
- 一些表达式语言生成Java类...
- 假设第一步完成...我有Java文件。我在修改Java之后创建了JavaLaxer和JavaParser,使用Java.g文件(http://jumbleagilemanuals.blogspot.com/2008/03/10-steps-to-ginning-to-parsing-with.html)
- 我正在使用antlr-3.3-complete.jar来获取AST树。现在我写了测试类,我正在获取CommonTree对象(请参阅此列表下面的代码)...
- 现在我想将AST树转换为XML输出,以便我可以将它保存在数据库中...
- 我想写Reader类可以读取XML文件,并创建Java源..
- 使用Java源代码,以在运行时创建对象...
static final TreeAdaptor adaptor = new CommonTreeAdaptor() {
@Override
public Object create(Token payload) {
CommonTree cTree = new CommonTree();
cTree.token = payload;
return cTree;
}
};
CharStream c = new ANTLRFileStream(
"C:/Documents and Settings/kkk/IBM/rationalsdp/workspace17"+
"/myproject/src/main/java/com/xyz/abc/infrastructure/"+
"email/service/impl/EmailServiceImpl.java");
JavaLexer lexer = new JavaLexer(c);
CommonTokenStream tokens = new CommonTokenStream();
tokens.setTokenSource(lexer);
JavaParser parser = new JavaParser(tokens);
parser.setTreeAdaptor(adaptor);
/* AST tree for my java code */
CommonTree tree = (CommonTree) parser.compilationUnit().getTree();
我挣扎步骤4到步骤6 ...我还找不到解决方案!
这是我想要做的...首先,我想将Java文件转换为一些XML并将其存储在数据库中。然后,我想读回我的XML文件,并将该XML文件转换为Java文件....然后,我想编译我的Java文件并在运行时创建对象。原因为什么我想要做所有这些是因为我们想要有能力在运行时注入新的Java对象而无需重新启动服务器。我们也可能最终改变现有的Java对象的功能。我认为ANTLR是正确的方式...但是我为找不到解决方案而苦苦挣扎。 – 2011-04-06 18:35:02
如果你想要做的是“注入”具有相同树木的新对象,没有太多的理由这样做;你可以使用原文。因此,真正的问题在于阅读其中一个XML树,并决定在哪里进行更改并进行更改。你打算怎么做? – 2011-04-06 22:43:47