JavaParser:如何添加新的语言元素

JavaParser:如何添加新的语言元素,java,javaparser,Java,Javaparser,我想创建一个Java transpiler,它将读取几乎所有的Java代码(称为JavaHash),并在另一端发出“纯”Java代码。特别是,我想在hashmap成员前面添加一个新标记,即hashtag“#”,这样我就可以像访问JavaScript哈希对象一样访问它: Map<String, String> foo = new HashMap<String, String>(); ... foo.put("name", "Roger"); ... String name

我想创建一个Java transpiler,它将读取几乎所有的Java代码(称为JavaHash),并在另一端发出“纯”Java代码。特别是,我想在hashmap成员前面添加一个新标记,即hashtag“#”,这样我就可以像访问JavaScript哈希对象一样访问它:

Map<String, String> foo = new HashMap<String, String>();
...
foo.put("name", "Roger");
...
String name = #foo.name;
mapfoo=newhashmap();
...
foo.put(“姓名”、“罗杰”);
...
字符串名称=#foo.name;
我无法让JavaParser执行任何操作,只能在“#”标签上抛出一个错误


有没有办法在解析令牌之前捕获它们?

这绝非小事,但却是可行的

JavaParser基于,它用来生成解析器代码。然后,解析器使用代码模型类创建一个抽象语法树

如果要添加新的语言元素,则需要:

  • 实现代码模型类
  • 扩展用于解析器生成的语法
这并不容易,您需要对JavaCC有很好的了解和理解。但这是绝对可行的

剩下的是花生。您将编写一个访问者并使用它遍历AST。一旦遇到适当类型的节点,只需将AST的部分转换为“普通”Java并序列化即可


顺便说一下,JavaParser是构建您想要的东西的非常好的基础。恭喜你的选择,事实上,这是交易的一半。

也许你会喜欢用kotlin来代替。它具有映射属性访问权限。