我想使用clang-format
化规格代码(<file>.sc
)
Specc有一些预定义的关键字,它们的格式与class
在C++中的格式相同:
behavior
interface
我可以在.clang-format
文件中实现这一点吗?
带有behavior
关键字的输入文件:
#include <stdio.h>
behavior Main(void)
{
int main(void)
{
printf("Hello World!\n");
return(0);
}
};
clang-format -style=Mozilla hello.sc
的输出
#include <stdio.h>
behavior Main(void)
{
int main(void)
{
printf("Hello World!\n");
return (0);
}
}
;
如果我使用关键字class
而不是behavior
,则会得到以下输出,这也是我想要的:
#include <stdio.h>
class Main(void)
{
int main(void)
{
printf("Hello World!\n");
return (0);
}
};
TLDR:我希望clang-format
处理来自specc的关键字behavior
,就像它处理关键字class
一样。
注意,我只想格式化这个文件,我不打算用C/C++编译器编译它。
2条答案
按热度按时间nxowjjhe1#
您是否考虑过将SpecC支持开发/贡献为clang格式,作为一种一流的语言?
由于它主要是一种C风格的语言,我不认为它很难添加。
我最近开始努力添加C#支持(我猜这可能更糟),并且在格式化方面遇到了类似的问题,我希望关键字在C#和C++中的行为有所不同(public就是其中之一)
例如,一种机制是将关键字转换为其他关键字类型(或Token类型),然后可以使用这些关键字类型为不同的语言设置不同的代码格式。
在本例中,我将“行为”标记转换为“类”标记
虽然我不能让你的确切例子工作的(主要(空))似乎是混乱的clang格式
通过这个改变(并在Lexing期间调用它),我能够使clang-format认为“behavior”关键字是“class”关键字,而不仅仅是一个返回类型(我认为它认为它是这样的)
这意味着当它看到行为时,它将应用任何正在寻找类的格式规则,这将倾向于做更多正确的事情。
您可能需要更多的管道来允许一些SpecC特定的规则,但这不会超出可能性的范围。
LLVM对于他们允许的内容有一个相当高的标准,但是我想如果这是一个标准语言,并且有很大的兴趣,并且有人愿意支持它,你至少可以要求他们考虑它(特别是如果有人提供补丁),或者你总是可以“简单地派生LLVM”并添加它。
只是一个想法
9gm1akwq2#
正如@Jason在对我的问题的评论中所建议的那样,我可以使用
sed
来替换关键字,因此我最终所做的就是将以下命令 Package 在shell脚本中: