Инструмент для без фигурной скобки, пробел чувствительный синтаксис C

Я пишу некоторый 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 больше четырех лет, таким образом, я не запрашиваю это из некоторой персональной трудности, отсутствия знакомства с синтаксисом блока или догматического присоединения. Я также знаю о том, что было бы вовлечено в запись одного из них, и это не вне моей способности, но я не хочу, чтобы это достаточно выровняло по ширине пребывание в течение времени, пишущий один.

10
задан Ollie Saunders 5 January 2010 в 10:23
поделиться

8 ответов

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)); 
} 
10
ответ дан 3 December 2019 в 13:19
поделиться

Даже если бы такой инструмент существовал, я бы настоятельно рекомендовал вам пересмотреть эту идею. Вот только несколько проблем, которые, как я думаю, вы найдете, делая это:

  1. Ваш код больше не будет стандартным C.
  2. Это означает, что у вас будут проблемы с чтением вашего кода другими программистами.
  3. Вы также не сможете использовать инструменты анализа кода, так как они не будут понимать ваш синтаксис.
  4. Если у вас есть какой-нибудь инструмент, который будет преобразовывать, скажем, при каждой компиляции, это все равно означает, что вы будете писать другой код, чем вы будете читать. Я бы не хотел использовать инструмент, который постоянно меняет мой код для меня.

Похоже, это действительно тот случай, когда подгонять свои привычки под других - более умный подход.

Надеюсь, это заставит вас задуматься.

28
ответ дан 3 December 2019 в 13:19
поделиться

Если Вы действительно хотите сделать это, то это не будет возможно без реализации парсера языка, и даже тогда, я не уверен, как будет выглядеть конвенция по кодированию для некоторых случаев в Вашем "новом языке, который выглядит как 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". Как говорили другие, такие вещи чреваты опасностью.

11
ответ дан 3 December 2019 в 13:19
поделиться

Отпечаток в стиле питона для C.

Похоже, это то, что вы ищете.

3
ответ дан 3 December 2019 в 13:19
поделиться

Нет инструмента, но псевдокод:

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
2
ответ дан 3 December 2019 в 13:19
поделиться

Да, есть одна, которая мне очень нравится. Они называют его Python.

.
1
ответ дан 3 December 2019 в 13:19
поделиться

http://www.cython.org/

Но это другой язык... в основном это питонский диалект со свойствами производительности C.

Не сворачивай свой язык, используй что-то стандартное.

1
ответ дан 3 December 2019 в 13:19
поделиться

Я не верю, что такой инструмент существует. Инструменты существуют для очистки форматирования, но код должен быть уже отформатирован на Си.

Я действительно думаю, что вы должны использовать язык в том виде, в каком он был задуман, и научиться использовать фигурные скобки.

.
0
ответ дан 3 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: