我希望解析ADA代码并使用Java构建其AST。我的信念是,有一个用Java编写的解析器来解析几乎所有的编程语言,但是经过几天的研究我还没有发现任何东西。
我发现的唯一有前途的工具是Adacore的libadalang(https://github.com/AdaCore/libadalang)。但是,这只为Ada和Python提供了api(尽管在自述文件中提到了Java)。
你有什么建议吗?如果没有使用Java解析Ada的直接方法,您是否熟悉任何可以作为中间件的库?例如,使用XXX工具解析Ada并将AST存储在模式(例如XML)中,然后使用Java解析XML?
答案 0 :(得分:1)
我是其中一位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的开发版本中!
答案 1 :(得分:0)
我想我已经读过可以从Java调用本机C库。
您可以对ASIS(Ada语义接口规范)进行C绑定,然后从Java调用它。