1

我想为vim-opencl 插件编写 OpenCL 语法检查器。OpenCL 编译器对输出错误进行了一些奇怪的格式化。有两种类型的错误。

正常(带有小错误说明):

"/tmp/OCLUKvOsF.cl", line 143: error: expression must have integral type
        rec_table[PRIME_P - ri] = PRIME_P - i;
                  ^

并且错误解释中的换行符不正常:

"/tmp/OCLUKvOsF.cl", line 148: error: a value of type "uint16" cannot be used
          to initialize an entity of type "uint"
    uint a = value, b = PRIME_P, u = 0, v = 0;
             ^

因此,麻烦在于将第二种情况下的损坏错误解释和第一种情况下的正常错误处理的两部分串联起来。

我使用syntastic作为通用语法检查器。现在我有这样的代码:

let errorformat = '%E"%f"\, line %l: error: %m,%+C%.%#,%-Z%p^,'.
                  \'%W"%f"\, line %l: warning: %m,%-C%.%#,'.
                  \'%-G%.%#'

因此,第一个和第二个错误如下所示:

program.cl|143 error| expression must have integral type rec_table[PRIME_P - ri] = PRIME_P - i; ^
program.cl|148 col 14 error| a value of type "uint16" cannot be used to initialize an entity of type "uint" uint a = value, b = PRIME_P, u = 0, v = 0;

几乎没问题(尤其是在第二种情况下),但我不知道如何做到这一点:

program.cl|143 col 19 error| expression must have integral type
program.cl|148 col 14 error| a value of type "uint16" cannot be used to initialize an entity of type "uint"

或者至少是这样的:

program.cl|143 col 19 error| expression must have integral type rec_table[PRIME_P - ri] = PRIME_P - i;
program.cl|148 col 14 error| a value of type "uint16" cannot be used to initialize an entity of type "uint" uint a = value, b = PRIME_P, u = 0, v = 0;

你有什么想法吗?

UPD。更新了错误格式和期望

4

1 回答 1

0

我不知道测试这个的有用方法,但你也需要用反斜杠转义你的空格。

我还可以在 s 之后放置一个 -space,%C以便它们只匹配以空格开头的行。

最后,对于警告,您忽略了一些行并且永远没有%Z任何地方。(我认为您不需要 Z 前面的减号,但我不清楚;我自己不使用减号。

祝你好运。

于 2012-11-08T00:46:00.217 回答