既存のCパーサーをJava用に使用できます。もちろん、ヘッダーファイルを解析する以上のことはしますが、それはあなたを傷つけるものではありません。
Eclipse CDTプロジェクトのパーサーを使用します。これはEclipseプラグインですが、Eclipseの外で正常に使用するには、Eclipseの3つのJARファイルをパーサーJARにバンドルするだけです。
CDTパーサーを使用するには、org.eclipse.cdt.core.model.ILanguage
の実装で開始します(例:org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage
)。 getTranslationUnit
にコードといくつかのヘルパーを渡すことができます。コードファイルはorg.eclipse.cdt.core.parser.FileContent
インスタンスで表されます(少なくともCDT7ではこれは大きく変わるようです)。このようなオブジェクトを作成する最も簡単な方法はFileContent.createForExternalFileLocation(filename)
またはFileContent.create(filename, content)
です。この方法で、Eclipse IFile
のことを気にする必要はありません。これはプロジェクトやワークスペース内でのみ機能するようです。
IASTTranslationUnit
は、ファイルのAST全体を表します。その中のすべてのノードは、IASTDeclaration
などのIASTSomething
タイプのインスタンスです。org.eclipse.cdt.core.dom.ast.ASTVisitor
の独自のサブクラスを実装して、visitorパターンを使用してASTを反復処理できます。さらなる助けが必要な場合は、ただ聞いてください。
使用するJARファイルは、org.eclipse.cdt.core.jar
,org.eclipse.core.resources.jar
,org.eclipse.equinox.common.jar
およびorg.eclipse.osgi.jar
です。
編集:私はこのために、ソースコードスニペットが含まれている紙発見した: 「オープンソースC++パーサ、活発にメンテナンス、完全に機能性、堅牢としてのEclipse C/C++開発ツーリングを使用する」が、それはありますもはやオンラインでは入手できなくなりました(短縮バージョンとしてのみ)。
lexとyaccのマニュアルページ(フレックスとバイソン)が役に立ちます –
ああ、私はyaccを忘れていました。私はすでにこれに既存のソリューションが存在することを期待していました。しかし、私はyaccを使って自分のストリーミングパーサーを作ることができたと思う。 – PhilW
@PhilW、パーサーを作成しましたか?私は、プリプロセッサ定義(整数定数のみ)を含むCヘッダを解析する必要があります。これらの定数をCヘッダからJavaアプリケーションに取得する必要があります。もちろん私は自分のものを実装する前に何らかの準備が整った解決策を探しています=) –