我现在正在编写一些C,因为我喜欢空格敏感的语法,我想这样写:
#include <stdio.h>
int main(void)
printf("Hello, world!")
return 0
而不是:
#include <stdio.h>
int main(void) {
printf("Hello, world!");
return 0;
}
是否有人知道将前者转换为后者的工具?
编辑:我真的没有兴趣与那些认为这是个坏主意的人争论。一定要继续认为,你有自己的理由。但至少知道这一点:我知道Python是一种空格敏感的语言,但我还没有使用它。我为什么要?我已经知道Ruby了。也知道:我不仅仅是第一次学习C而且我已经使用PHP和JavaScript超过四年了,所以我不是因为某些个人困难,对块语法缺乏熟悉或教条联系而要求这样做。我也知道写这些内容会涉及到什么,这不是我的能力,但我不希望这足以证明花时间写一个。
答案 0 :(得分:28)
即使有这样的工具,我也强烈建议你重新考虑这个想法。以下是我认为你会发现的一些问题:
这似乎是一种适合所有人的习惯的情况。
希望这会让你重新考虑。
答案 1 :(得分:11)
如果真的想要这样做,那么在没有实现语言解析器的情况下是不可能的,即便如此,我也不确定编码约定对于某些情况如何在你的“看起来像C但没有大括号的新语言”中。例如,请使用以下C代码:
struct a {
int i;
};
int main(void) {
...
}
你可以把它写成
struct a
int i
int main(void)
...
但它必须转换为原始代码,而不是:
struct a {
int i;
} /* Note the missing semicolon! */
int main(void) {
...
}
另外,鉴于下面的片段:
/* declare b of type struct a */
struct a {
int i;
} b;
/* a struct typedef */
typedef struct a {
int i;
} b;
您打算如何用您的语言指定这些内容?
您似乎也不想在您的语言中使用分号。这会严重限制您的代码,并使转换工具变得复杂,因为您无需额外的努力就无法使用延续线:
i = j +
k;
是合法的C,但
i = j + ;
k;
不是。
首先,您需要更准确地定义“无支撑C”的语法。正如其他人所说,这类事情充满了危险。
答案 2 :(得分:10)
PythoidC是一种无括号的C语言http://pythoidc.googlecode.com
c.include(c.h.stdio)
c.include(c.h.stdlib)
int fib(int n):
if (n<=2):
return 1
else:
return fib(n-1) + fib(n-2)
int main(int argc, char **argv):
int n //C style annotation
n=c.stdlib.atoi(argv[1])
c.stdio.printf('fibonacci(%d)=%d\n', n, fib(n))
PythoidC自动生成以下C代码:
int fib(int n){
if (n<=2){
return 1;}
else{
return fib(n-1) + fib(n-2);}}
int main(int argc, char **argv){
int n ;//C style annotation
n=atoi(argv[1]);
printf("fibonacci(%d)=%d\n", n, fib(n));
}
答案 3 :(得分:3)
Python-style indentation for C
看起来这就是你要找的东西。
答案 4 :(得分:2)
没有工具,但伪代码:
last_spc_count = 0
For all lines in input file check number of trailing spaces spc_count
Print old line
If spc_count > last_spc_count print "{\n" (last_spc_count-spc_count)/2 times
Else If spc_count < last_spc_count print "}\n" (last_spc_count-spc_count)/2 times
Else print "\n"
last_spc_count = spc_count
print "}\n" last_spc_count/2 times
答案 5 :(得分:1)
是的,我真的很喜欢。他们称之为Python。
答案 6 :(得分:1)
答案 7 :(得分:0)
我不相信这样的工具存在。存在用于清除格式的工具,但代码必须已经C格式化。
我真的认为你应该按照设计使用这种语言并学会使用大括号。