Я пишу некоторый 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 больше четырех лет, таким образом, я не запрашиваю это из некоторой персональной трудности, отсутствия знакомства с синтаксисом блока или догматического присоединения. Я также знаю о том, что было бы вовлечено в запись одного из них, и это не вне моей способности, но я не хочу, чтобы это достаточно выровняло по ширине пребывание в течение времени, пишущий один.
PythoidC - это бесстраничный язык Си 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 автоматически генерирует следующий Си-код:
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));
}
Даже если бы такой инструмент существовал, я бы настоятельно рекомендовал вам пересмотреть эту идею. Вот только несколько проблем, которые, как я думаю, вы найдете, делая это:
Похоже, это действительно тот случай, когда подгонять свои привычки под других - более умный подход.
Надеюсь, это заставит вас задуматься.
Если Вы действительно хотите сделать это, то это не будет возможно без реализации парсера языка, и даже тогда, я не уверен, как будет выглядеть конвенция по кодированию для некоторых случаев в Вашем "новом языке, который выглядит как 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". Как говорили другие, такие вещи чреваты опасностью.
Отпечаток в стиле питона для C.
Похоже, это то, что вы ищете.
Нет инструмента, но псевдокод:
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
Да, есть одна, которая мне очень нравится. Они называют его Python.
.Но это другой язык... в основном это питонский диалект со свойствами производительности C.
Не сворачивай свой язык, используй что-то стандартное.
Я не верю, что такой инструмент существует. Инструменты существуют для очистки форматирования, но код должен быть уже отформатирован на Си.
Я действительно думаю, что вы должны использовать язык в том виде, в каком он был задуман, и научиться использовать фигурные скобки.
.