2016-11-03 3 views
0

私はADAコードを解析し、Javaを使ってASTを構築しようとしています。私の信念は、ほぼすべてのプログラミング言語を解析するパーサーがJavaで書かれているということでしたが、数日の研究の後には何も見つかりませんでした。Javaで書かれたADAパーサはありますか?

Adacoreのlibadalang(https://github.com/AdaCore/libadalang)が私が見つけた唯一の有望なツールです。ただし、これはAdaとPythonにのみAPIを提供します(readmeファイルではJavaが説明されています)。

お勧めするものがありますか? Javaを使用してAdaを解析する直接的な方法がない場合、中間者として機能するライブラリをよく知っていますか?たとえば、XXXツールを使用してAdaを解析し、ASTをスキーマ(XMLなど)に保存してから、Javaを使用してXMLを解析します。

+1

文法があります(https://github.com/slebok/zoo/blob/master/zoo/ada/ada2005/txl/lehyaric-cordy/fetched/ada.grmのコンビネーション)。 javaで** ANTLR **文法を使用することは実現可能です。ある文法を他の文法に変換するのは簡単です。 –

+1

IIRC ANTLR Ada文法があります。 –

+1

Adaを解析するためのリソースが不足しているため、この質問を保留にする決定が下されます。現在のすべての回答は、Ada ASTにアクセスしたい人に役立ちます。 –

答えて

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の開発版にこれを追加します!

+0

私は現在の実装を利用して、Javaで解析可能な中間形式(例えば、あなたが提案するXMLまたはJSON)を生成する可能性に同意します。実際、AdacoreはAdaを使ってXMLファイルの形でASTを生成するこの機能を提供しています(あなたの提案に基づくPythonとは対照的です)。あなたの提案は非常に固いですが、現時点では私たちのプラットフォームからのみJavaコマンドを実行することができます。したがって、Java以外の中間レベルはオプションではありません。 Ada-JavaインタフェースまたはPython-Javaインタフェース(ある場合)を使用しない限り – Thanos

+0

この回答はオリジナルの質問には返答しませんが、私が見つけた唯一の選択肢はあなたが提案したものに非常に近いため、正しいものとしてマークします。私が話している代替案はadacoreから直接得られます。 adaのファイルASTのxmlファイルを返すgnat2xmlというツールがあります。任意のxmlライブラリを使用して、このXMLファイルを解析できます。 – Thanos

0

私は、JavaからネイティブCライブラリを呼び出すことができると読んだと思います。

ASIS(Ada Semantic Interface Specification)へのCバインディングを作成し、それをJavaから呼び出すことができます。

+0

ご回答いただきありがとうございます。私が知る限り、すでにAJIS(Ada-Java Interface Specification)コンポーネントがあります。私がもっと真っ直ぐなものを見つけることができなければ、これは私の最終的な選択になるだろう。 – Thanos

関連する問題