我想创建一个Java转换器,它将读取几乎Java代码(称之为JavaHash)并发出" pure"另一端是Java代码。特别是,我想添加一个新标记,它是标签"#"在hashmap成员前面,以便我可以像JavaScript哈希对象一样访问它:
Map<String, String> foo = new HashMap<String, String>();
...
foo.put("name", "Roger");
...
String name = #foo.name;
我无法让JavaParser做任何事情,只会在&#34;#&#34;上抛出错误。主题标签
有没有办法在解析之前捕获令牌?
答案 0 :(得分:6)
这远非琐碎,但可行。
JavaParser基于JavaCC,它使用the following grammar生成解析器代码。然后,解析器使用代码模型类创建抽象语法树。
如果您想添加新的语言元素,则需要:
这不是那么容易,您需要对JavaCC有很好的了解和理解。但它绝对可行。
其余的是花生。您将编写一个访问者并使用它来遍历AST。一旦您遇到了相应类型的节点,只需将AST的一部分转换为&#34; normal&#34; Java和序列化。
顺便说一下,JavaParser是一个非常好的基础来构建你想要的东西。祝贺你的选择,实际上,这只是交易的一半。