Tool for braceless, whitespace sensitive C syntax

2020-03-01 16:56发布

I'm writing some C at the moment and because I like whitespace sensitive syntax, I'd like to write it like this:

#include <stdio.h>

int main(void)
  printf("Hello, world!")
  return 0

Instead of this:

#include <stdio.h>

int main(void) {
  printf("Hello, world!");
  return 0; 
}

Does anybody know of a tool that will convert the former into the latter?

Edit: I've really no interest in arguing with those that think this is a bad idea. By all means continue to think that, you have your reasons. But at least know this: I'm aware Python is a whitespace sensitive language but I have not used it. Why would I? I know Ruby already. Also know: I am not just learning C for the first time and I have used PHP and JavaScript for more than four years, so I am not requesting this out of some personal difficulty, lack of familiarity with block syntax, or dogmatic affiliation. I am also aware of what would be involved in writing one of these and that's not beyond my ability but I don't want this enough to justify spending the time writing one.

标签: c syntax
8条回答
闹够了就滚
2楼-- · 2020-03-01 17:29

Even if there was such a tool, I would strongly encourage you to reconsider this idea. Here are just a few problems I think you'll find with doing this:

  1. Your code will no longer be standard C.
  2. That means that you'll have a problem with other programmers reading your code.
  3. You'll also be unable to use any code-analysis tools, since they won't understand your syntax.
  4. If you've got some kind of tool that will convert on, say, every compile, that still means you'll be writing different code than you'll be reading. I would hate to use a tool that changes my code for me all the time.

This really seems to be a case where fitting your habits to everybody else is the smarter approach.

Hope this causes you to reconsider.

查看更多
Emotional °昔
3楼-- · 2020-03-01 17:33

http://www.cython.org/

But that's a different language... it's basically a Python dialect with C performance properties.

Don't roll your own language, use something standard.

查看更多
▲ chillily
4楼-- · 2020-03-01 17:44

If you really want to do this, it is not going to be possible without implementing a language parser, and even then, I am not sure how the coding convention will be for some of the cases in your "new language that looks like C but has no braces". For example, take the following C code:

struct a {
    int i;
};

int main(void) {
    ...
}

You can write it as

struct a
    int i

int main(void)
    ...

But it has to be converted to the original code, not:

struct a {
    int i;
} /* Note the missing semicolon! */

int main(void) {
    ...
}

Also, given the snippets below:

/* declare b of type struct a */
struct a {
    int i;
} b;

/* a struct typedef */
typedef struct a {
    int i;
} b;

How are you going to specify these in your language?

You seem to not want to use semicolons in your language either. This restricts your code quite a bit, and makes the conversion tool complicated as well, because you can't have continuation lines without extra effort:

i = j +
k;

is legal C, but

i = j + ;
k;

is not.

So first, you need to define the grammar of your "braceless C" more precisely. As others have said, this sort of thing is fraught with peril.

查看更多
Anthone
5楼-- · 2020-03-01 17:45

Python-style indentation for C.

Looks like it is what you are looking for.

查看更多
混吃等死
6楼-- · 2020-03-01 17:50

Yea, there's one I really like. They call it Python.

查看更多
欢心
7楼-- · 2020-03-01 17:51

I don't believe such a tool exists. Tools exist to clean formatting, but the code must already be C formatted.

I really think you should use the language as designed and learn to use braces.

查看更多
登录 后发表回答