有没有用Java编写的ADA解析器?

时间:2016-11-03 11:40:34

标签: java parsing ada

我希望解析ADA代码并使用Java构建其AST。我的信念是,有一个用Java编写的解析器来解析几乎所有的编程语言,但是经过几天的研究我还没有发现任何东西。

我发现的唯一有前途的工具是Adacore的libadalang(https://github.com/AdaCore/libadalang)。但是,这只为Ada和Python提供了api(尽管在自述文件中提到了Java)。

你有什么建议吗?如果没有使用Java解析Ada的直接方法,您是否熟悉任何可以作为中间件的库?例如,使用XXX工具解析Ada并将AST存储在模式(例如XML)中,然后使用Java解析XML?

2 个答案:

答案 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调用它。