I\'m writing some C at the moment and because I like whitespace sensitive syntax, I\'d like to write it like this:
#include
int main(void)
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.
No tool, but pseudocode:
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
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.
PythoidC is a braceless C language 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 automatically generates the following C code:
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));
}
Yea, there's one I really like. They call it Python.
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.