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.
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:
This really seems to be a case where fitting your habits to everybody else is the smarter approach.
Hope this causes you to reconsider.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With