我正在使用 antlr 将自定义语言翻译成 C++ 代码。在这种语言中,用户可以在指令之间嵌入 C++ 代码片段$code...$endcode
,并按原样插入到翻译后的 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++