有没有用Java写的ADA解析器?
Is there any ADA parser written in Java?
我正在寻找解析 ADA 代码并使用 Java 构建其 AST。我相信有一个用 Java 编写的解析器可以解析几乎所有的编程语言,但是经过几天的研究我还没有找到任何东西。
我发现的唯一有前途的工具是 Adacore 的 libadalang (https://github.com/AdaCore/libadalang)。但是,这只为 Ada 提供了 api 和 Python(尽管在自述文件中提到了 Java)。
你有什么建议吗?如果没有使用 Java 解析 Ada 的直接方法,你们是否熟悉任何可以作为中间体的库?例如,使用 XXX 工具解析 Ada 并将 AST 存储在模式中(例如 XML),然后使用 Java?
解析 XML
我想我已经读到可以从 Java 调用本机 C 库。
您可以对 ASIS(Ada 语义接口规范)进行 C 绑定,然后从 Java.
调用它
我是 Libadalang 开发人员之一,我们确实计划在某个时候添加 Java 绑定,但这目前不是高优先级项目。
有一个通用格式的序列化器是很容易添加的东西,特别是 python API 如果你对树有全面的反省。
这是 Libadalang 的 python API 的 JSON 序列化程序:
import json
def node_to_data(self):
if isinstance(self, ASTList):
return [i.to_data() for i in self if i is not None]
else:
return {n: v.to_data()
for n, v in self.iter_fields(with_properties=False)
if v is not None}
def token_to_data(self):
return {"kind": "Token", "token_kind": self.kind, "text": self.text}
ASTNode.to_data = node_to_data
Token.to_data = token_to_data
ASTNode.to_json = lambda self: json.dumps(self.to_data())
我会尽快将其添加到libadalang的开发版本中!
我正在寻找解析 ADA 代码并使用 Java 构建其 AST。我相信有一个用 Java 编写的解析器可以解析几乎所有的编程语言,但是经过几天的研究我还没有找到任何东西。
我发现的唯一有前途的工具是 Adacore 的 libadalang (https://github.com/AdaCore/libadalang)。但是,这只为 Ada 提供了 api 和 Python(尽管在自述文件中提到了 Java)。
你有什么建议吗?如果没有使用 Java 解析 Ada 的直接方法,你们是否熟悉任何可以作为中间体的库?例如,使用 XXX 工具解析 Ada 并将 AST 存储在模式中(例如 XML),然后使用 Java?
解析 XML我想我已经读到可以从 Java 调用本机 C 库。
您可以对 ASIS(Ada 语义接口规范)进行 C 绑定,然后从 Java.
调用它我是 Libadalang 开发人员之一,我们确实计划在某个时候添加 Java 绑定,但这目前不是高优先级项目。
有一个通用格式的序列化器是很容易添加的东西,特别是 python API 如果你对树有全面的反省。
这是 Libadalang 的 python API 的 JSON 序列化程序:
import json
def node_to_data(self):
if isinstance(self, ASTList):
return [i.to_data() for i in self if i is not None]
else:
return {n: v.to_data()
for n, v in self.iter_fields(with_properties=False)
if v is not None}
def token_to_data(self):
return {"kind": "Token", "token_kind": self.kind, "text": self.text}
ASTNode.to_data = node_to_data
Token.to_data = token_to_data
ASTNode.to_json = lambda self: json.dumps(self.to_data())
我会尽快将其添加到libadalang的开发版本中!