#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 65536
#define NOT_IN_COMMENT 0
#define SINGLE_COMMENT 1
#define MULTI_COMMENT 2
int status = NOT_IN_COMMENT; /* Are we in a comment? What type? */
int in_string = 0; /* Are we inside of a string constant? */
char* stripcomments(char* stripped,char* code)
{
int ndx; /* index for code[] */
int ondx; /* index for output[] */
char prevch; /* Value of the previous character */
char ch; /* Character to input into */
/* Remove all comments from the code and display results to user */
for (ndx
=ondx
=0; ndx
< strlen(code
); ndx
++) {
char current = code[ndx];
if (in_string) {
if (current == '"') in_string = 0;
stripped[ondx++] = current;
}
else {
if (status == NOT_IN_COMMENT) {
if (current == '"') {
stripped[ondx++] = current;
in_string = 1;
continue;
}
if (current == '/' && prevch == '/') status = SINGLE_COMMENT;
else if (current == '*' && prevch == '/') status = MULTI_COMMENT;
else if (current
!= '/' || (current
== '/' && ndx
< strlen(code
)-1 && !(code
[ndx
+1] == '/' || code
[ndx
+1] == '*'))) stripped
[ondx
++] = current
; }
else if (status == SINGLE_COMMENT) {
if (current == '\n') {
status = NOT_IN_COMMENT;
stripped[ondx++] = '\n';
}
}
else if (status == MULTI_COMMENT) {
if (current == '/' && prevch == '*') status = NOT_IN_COMMENT;
}
}
prevch = current;
}
stripped[ondx] = '\0';
return(stripped);
}
int main(void)
{
char code[MAX_LENGTH]; /* Buffer that stores the inputted code */
char stripped[MAX_LENGTH];
while( fgets(code
,sizeof(code
),stdin
) ) {
//printf("%s\n",code);
//strip comments...
stripcomments(stripped,code);
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2RlZmluZSBNQVhfTEVOR1RIIDY1NTM2CgojZGVmaW5lIE5PVF9JTl9DT01NRU5UIDAKI2RlZmluZSBTSU5HTEVfQ09NTUVOVCAxCiNkZWZpbmUgTVVMVElfQ09NTUVOVCAgMgppbnQgc3RhdHVzID0gTk9UX0lOX0NPTU1FTlQ7ICAvKiBBcmUgd2UgaW4gYSBjb21tZW50PyBXaGF0IHR5cGU/ICovCmludCBpbl9zdHJpbmcgPSAwOyAgICAgICAgICAgIC8qIEFyZSB3ZSBpbnNpZGUgb2YgYSBzdHJpbmcgY29uc3RhbnQ/ICovCmNoYXIqIHN0cmlwY29tbWVudHMoY2hhciogc3RyaXBwZWQsY2hhciogY29kZSkKewogICAgaW50IG5keDsgICAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggZm9yIGNvZGVbXSAqLwogICAgaW50IG9uZHg7ICAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggZm9yIG91dHB1dFtdICovCiAgICBjaGFyIHByZXZjaDsgICAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiB0aGUgcHJldmlvdXMgY2hhcmFjdGVyICovCiAgICBjaGFyIGNoOyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgdG8gaW5wdXQgaW50byAqLwoKICAgIC8qIFJlbW92ZSBhbGwgY29tbWVudHMgZnJvbSB0aGUgY29kZSBhbmQgZGlzcGxheSByZXN1bHRzIHRvIHVzZXIgKi8KICAgIGZvciAobmR4PW9uZHg9MDsgbmR4IDwgc3RybGVuKGNvZGUpOyBuZHgrKykKICAgIHsKICAgICAgICBjaGFyIGN1cnJlbnQgPSBjb2RlW25keF07CgogICAgICAgIGlmIChpbl9zdHJpbmcpIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJyInKSBpbl9zdHJpbmcgPSAwOwogICAgICAgICAgICBzdHJpcHBlZFtvbmR4KytdID0gY3VycmVudDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gTk9UX0lOX0NPTU1FTlQpIHsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09ICciJykgewogICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkW29uZHgrK10gPSBjdXJyZW50OwogICAgICAgICAgICAgICAgICAgIGluX3N0cmluZyA9IDE7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJy8nICYmIHByZXZjaCA9PSAnLycpIHN0YXR1cyA9IFNJTkdMRV9DT01NRU5UOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA9PSAnKicgJiYgcHJldmNoID09ICcvJykgc3RhdHVzID0gTVVMVElfQ09NTUVOVDsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQgIT0gJy8nIHx8IChjdXJyZW50ID09ICcvJyAmJiBuZHggPCBzdHJsZW4oY29kZSktMSAmJiAhKGNvZGVbbmR4KzFdID09ICcvJyB8fCBjb2RlW25keCsxXSA9PSAnKicpKSkgc3RyaXBwZWRbb25keCsrXSA9IGN1cnJlbnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBTSU5HTEVfQ09NTUVOVCkgewogICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IE5PVF9JTl9DT01NRU5UOwogICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkW29uZHgrK10gPSAnXG4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gTVVMVElfQ09NTUVOVCkgewogICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gJy8nICYmIHByZXZjaCA9PSAnKicpIHN0YXR1cyA9IE5PVF9JTl9DT01NRU5UOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByZXZjaCA9IGN1cnJlbnQ7CiAgICB9CiAgICBzdHJpcHBlZFtvbmR4XSA9ICdcMCc7CiAgICByZXR1cm4oc3RyaXBwZWQpOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBjaGFyIGNvZGVbTUFYX0xFTkdUSF07ICAgICAgICAvKiBCdWZmZXIgdGhhdCBzdG9yZXMgdGhlIGlucHV0dGVkIGNvZGUgKi8KICAgIGNoYXIgc3RyaXBwZWRbTUFYX0xFTkdUSF07CgogICAgd2hpbGUoIGZnZXRzKGNvZGUsc2l6ZW9mKGNvZGUpLHN0ZGluKSApCiAgICB7CiAgICAgICAgLy9wcmludGYoIiVzXG4iLGNvZGUpOwogICAgICAgIC8vc3RyaXAgY29tbWVudHMuLi4KICAgICAgICBzdHJpcGNvbW1lbnRzKHN0cmlwcGVkLGNvZGUpOwogICAgICAgIGlmKCBzdHJsZW4oc3RyaXBwZWQpID4gMCApIHByaW50ZigiJXMiLHN0cmlwcGVkKTsKICAgIH0KfQ==