我有以下包含 CPP 宏的 Haskell 文件。
#define FOO( x, y ) x ++ y
foo =
FOO("a",
"b"
++ "c")
bar = 1
cpphs
时,我得到以下结果。
#line 1 "Test.hs"
foo =
"a" ++ "b"
++ "c"
bar = 1
line 指令指出该指令后面的行是
1
的第 Test.hs
行。因此,foo
仍位于第 3
行,而 bar
现在位于第 7
行,而它在原始文件中一直位于第 8
行。看起来逗号之后和第一个非空白标记之前的所有空白标记都被删除,从而丢失了原始换行符。我有以下问题。
bar
的位置?bar
的位置?我无法以任何方式更改文件的内容。
您必须为输入文件编写自己的简单预处理器,您的预处理器将在每行之前插入行指令。
输入:
#define FOO( x, y ) x ++ y
foo =
FOO("a",
"b"
++ "c")
bar = 1
输出:
#line 1
#define FOO( x, y ) x ++ y
#line 2
#line 3
foo =
#line 4
FOO("a",
#line 5
"b"
#line 6
++ "c")
#line 7
#line 8
bar = 1
然后这个输出可以传递给
cpphs
。你会得到你想要的但相当冗长的结果。
#line 1 "Test.hs"
#line 2 "Test.hs"
#line 3 "Test.hs"
foo =
#line 4 "Test.hs"
#line 5 "Test.hs"
"a" ++ "b"
#line 6 "Test.hs"
++ "c"
#line 7 "Test.hs"
#line 8 "Test.hs"
bar = 1