【问题标题】:JavaParser: How to add new language elementsJavaParser:如何添加新的语言元素
【发布时间】:2018-05-09 19:09:09
【问题描述】:

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

Map<String, String> foo = new HashMap<String, String>();
...
foo.put("name", "Roger");
...
String name = #foo.name;

我无法让 JavaParser 执行任何操作,只能在“#”标签上抛出错误。

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

【问题讨论】:

  • 也许你会喜欢使用 kotlin。它具有地图属性访问权限。

标签: java javaparser


【解决方案1】:

这远非微不足道,而是可行的。

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

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

  • 实现代码模型类;
  • 扩展用于解析器生成的语法。

这并不容易,您需要对 JavaCC 有很好的了解和理解。但这绝对是可行的。

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

顺便说一句,JavaParser 是构建您想要的东西的一个很好的基础。恭喜您的选择,实际上这是成功的一半。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多