カスタム言語を C++ コードに変換するために antlr を使用しています。この言語では、ユーザーは$code...$endcode
ディレクティブ間に C++ コード スニペットを埋め込むことができます。これは、翻訳された C++ コードにそのまま挿入されます。
次の問題があります: コード スニペットにエラーがある場合、コンパイラに、翻訳された C++ コードではなくソース ファイルを指定してもらいたいのですが。
次のように行ディレクティブを使用してみましたが、うまくいきませんでした:
"foo.custom_laguage"
1 $code
2 ...some c++ code...
3 $endcode
に翻訳されます
"auto-generated.cpp"
42 #line 2 "foo.custom_language"
43 ...some c++ code...
44 #line __LINE__ __FILE__
__LINE__
#line ディレクティブが後でマクロによって書き込まれる内容を変更するため、これは機能しません。変換された C++ コードで行番号を実際の行番号に戻すにはどうすればよいですか? antlr はどのようにこれを行いますか?
自動生成されたコードを次のように表示します。
"auto-generated.cpp"
42 #line 2 "foo.custom_language"
43 ...some c++ code...
44 #line 44 "auto-generated.cpp" //actual line in this file
45 ..some more C++ code ...
編集:#line default
ディレクティブ
を使用して C# 言語でこれを行う方法があることを知りました: http://msdn.microsoft.com/en-us/library/34dk387t.aspx
しかし、C++ に似たものを見つけることができませんでした