2

可能であれば、C# コード ベースから ANTLR を使用して C++ AST を取得しようとしています。

これで、基本的なワークフローは明確に思えます。ANTLRWorks を使用して .cs レクサーとパーサーを生成し、それらと ANTLR 参照を C# プロジェクトに追加し、C++ ソースを与え、結果のデータ構造を処理します。

しかし、私はすでに2番目のステップで失敗しています。http://www.antlr.org/grammar/listから C++ 文法をダウンロードし(Aurelian Melinte による「C++ 文法」と、Ramin Zaghi による「ANTLR 3.2 の C++ 文法とコード トレーサー」を試しました)、レクサーとパーサーを生成しました。 "language = CSharp3;" を設定することによる C# 文法のオプションで。しかし、パーサー ファイルとレクサー ファイルを含む C# プロジェクトをコンパイルできません。

問題は、これが私が使用している文法の問題なのか、利用可能なバージョンの問題なのかわからないことです... ANTLR、C# ランタイム、C# ターゲットには非常に多くの異なるバージョンがあります。すべての組み合わせを試すことは、かなり絶望的な作業のようです。

ただし、現在の組み合わせは正常に機能しているように見えます。小さな例の文法ではエラーが 1 つだけ出てきます (C# lexer の「HIDDEN」を「Hidden」に変更する必要があり、それだけです)。ただし、C++ パーサー/lexer は引き続き主にプリプロセッサ ディレクティブと配列宣言を処理する多くのコンパイラ エラー。

ANTLR で生成された C# ファイルを使用して C++ を解析できた人はいますか? これがどのように機能するのか、誰にもわかりませんか?

4

2 に答える 2

3

問題は、両方の文法に埋め込みコードがあり、そのコードが C++ で記述されていることです。埋め込みコードは複雑な文法では非常に一般的であるため、C++ を単に解析するのではなく、C# で C++ を解析するための文法を見つける必要があります。補足として、Java で C++ を解析するものを見つけることができれば、IKVMを使用して C# から使用できます。

于 2012-09-21T09:59:14.240 に答える