Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tool for braceless, whitespace sensitive C syntax

Tags:

c

syntax

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.

like image 470
Ollie Saunders Avatar asked Jan 04 '10 23:01

Ollie Saunders


2 Answers

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.

like image 69
Edan Maor Avatar answered Oct 26 '22 23:10

Edan Maor


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.

like image 29
Alok Singhal Avatar answered Oct 26 '22 22:10

Alok Singhal