/************************************************************************ Comprehesive Examination - II sem 1999-2000 Computer Programming - I *************************************************************************/ /* Question: Write a complete C program that accepts a C program as input, removes all the valid comments fromm it and prints the input program devoid of all comments. Scan the input program until a @ symbol is encountered in the input. NOTE: The start of a valid C comment is characterized by the presence of a / character immediately followed by a * character. The end of a comment is indicated by the presence of a * and a / character immediately following it. But if the above pattern comes within a string literal then it is not treated as a comment. Example: Then the output must be: main() { x=y; /*This is a comment*/ /* printf("Hello"); /* This is a comment and more comments to follow*/ /* i=0; printf("/*This is not a comment*//*"); }@ If the input to your program is: main() { x=y; printf("Hello"); i=0; printf("/*This is not a comment*//*"); } - O - Congratulations! You have implemented a part of the C Preprocessor!!!! */ #include <stdio.h> #define COMMENT 1 main() { char ch,prev=0; int flag=0,in_string=0; while((ch=getchar())!='@') { if(prev=='*' && ch=='/' && !in_string) { flag=0; prev=' '; //printf("\nComment Off\n"); continue; } if(prev=='/' && ch=='*' && !in_string) { flag=COMMENT; //printf("\nComment ON\n"); prev=' '; continue; } if(ch=='\"' && prev!='\\' && flag!=COMMENT) { //printf("\nToogle String\n"); in_string=!in_string; } if(prev=='/' && flag!=COMMENT) putchar(prev); if(ch!='/') if(flag!=COMMENT) putchar(ch); prev=ch; } printf("\n"); }