7

Java および C コードの ast の xml 表現を取得したいと考えています。3か月前、私はまだこの質問をしましたが、解決策は私にとって快適ではありませんでした

  • srcmlはこの問題の良い解決策のようですが、行番号と列をサポートしていませんが、その機能が必要です。
  • elsaについて: cite: 「Elsa AST を XML ドキュメントとしてエクスポートする取り組みが進行中です。次の公開リリースでこれを宣伝できると期待しています。」
  • dms ... わかりませんでした。
  • 特にJavaの場合、行番号をサポートするjavamlがあります。ただし、sourceforge ページにはファイルがリストされていません。

質問: 行番号 (および列) をサポートする xml への ast の変換をサポートする利用可能なソフトウェアがあります [特に Java および c/c++ の場合]? javaml と srcml に代わるものはありますか?

ps: パーサー ジェネレーターは必要ありません。コンソールの入力で使用できるツールを見つけたいと思っています:./my-xml-generator Test.java [またはそのようなもの] ...またはJava実装も素晴らしいでしょう。

4

5 に答える 5

3

少し遅れましたが、ここにあります: http://xmltranslator.appspot.com/sourcecodetoxml.html

私はそれを自分で実装し、PHP と Java を XML に変換します。無料ですのでお楽しみください!

大穴。

于 2012-08-13T02:38:45.223 に答える
2

DMSについて何がわからなかったのですか?

それが存在します。

C、C++、Java、C#、COBOL (および他の多くの言語) 用のコンパイラの正確なパーサー/フロントエンドがあります。

解析するものに対して、完全な抽象構文ツリーを自動的に構築します。各 AST ノードには、そのノードの開始を表すトークンのファイル/行/列がスタンプされ、最後の列は DMS API 呼び出しによって計算できます。

AST から XML を生成する組み込みオプションがあり、ノード タイプ、ソース位置 (上記のように)、および関連付けられたリテラル値を備えています。コマンドライン呼び出しは次のとおりです。

 run DMSDomainParser ++XML  <path_to_your_file>

このような XML の結果が Java でどのように見えるかを見ることができます。

あなたはおそらく、あなたが望んでいるものを本当に望んでいません。1000 C プログラムには、100K 行の #include ファイルが含まれる場合があります。ラインは 5 ~ 10 個のノードを生成します。DMS XML 出力は簡潔で、各ノードは 1 行しか使用しないため、XML の ~~ 100 万行、それぞれ 60 文字 --> 6000 万文字を見ていることになります。これは大きなファイルであり、おそらく XML ベースのツールで処理したくないでしょう。

DMS 自体は、構築する AST を操作するための膨大な量のインフラストラクチャを提供します: トラバース、パターン マッチング (基本的にソース形式でコード化されたパターンとの照合)、ソースからソースへの変換、制御フロー、データ フロー、ポイント ツー 分析、グローバル コール グラフ. この機械をすべて複製するのは驚くほど難しいことに気付くでしょう。また、何か面白いことをするために必要になるでしょう。

道徳: XML と戦うよりも、DMS のようなものを使用して AST を直接操作する方がはるかに優れています。

完全な開示: 私は DMS の設計者です。

于 2010-05-14T01:36:47.210 に答える
1

http://www.gccxml.org/HTML/Index.htmlに GCC-XML があります。私自身、実際に使ったことはありません。

于 2010-05-12T10:28:35.567 に答える
0

Java の場合のみ、BeautyJを使用できます。

-xml.* オプションを使用して、ファイルに対して起動できます。例えば:

java /your/dir/BeautyJ/lib/beautyj.jar beautyj -xml.out= -xml.doctype your_file.java

...そして、そのファイル (および含まれているファイル) の XML 表現を取得します。

ところで:「-xml.out=」オプションは出力ファイルを指定します。そのように使用し、末尾に「=」を付けると、STDOUT に出力されます。エラーではありません。

于 2012-09-19T13:23:05.947 に答える