我使用antlr將自定義語言翻譯爲C++代碼。 用這種語言,用戶可以在$code...$endcode
指令之間嵌入C++代碼片段,這些代碼片段按照原樣插入到翻譯後的C++代碼中。使用antlr和行指令插入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++
我只是檢查生產(使用C目標)是什麼ANTLR - 它似乎沒有在嵌入代碼中插入任何行指令。它只是將源的文件名和行號插入註釋 –
爲什麼你想要將文件和行號設置爲*翻譯*文件? –
我想這樣做,使這些代碼片段中的調試更容易。用戶應該更正來源,而不是自動生成的代碼。我知道這會使得必須始終使用自動生成的代碼來分發源文件,但在我的應用程序中,不需要維護自動生成的代碼。它立即編譯,並使用可執行文件。 –