main() { int c,d; while((c=getchar())!=EOF) /*读入一个字符给c,如果不是文件结束*/ rcomment(c); /*调用rcomment函数处理*/ return 0; }
main() { int c; while ((c=getchar()) != EOF) //遍历整个代码文件 rcomment(c); return 0; }
int main() { int c, d; while ((c = getchar()) != EOF) { rcomment(c); } return 0; }
/* 移除所有注释 */ main(void) { int c, d; while ((c = getchar()) != EOF) rcomment(c); return 0; }
int main(void) { int c,d; printf(" To Check /* Quoted String */ \n"); while((c=getchar())!=EOF) rcomment(c); return 0; }
void rcomment(int c) { int d; if (c=='/') { if ((d=getchar())=='*') in_comment(); else if (d=='/') { putchar(c); rcomment(d); } else { putchar(c); putchar(d); } } else if (c=='\'' || c=='"') echo_quote(c); else putchar(c); }
/*rcomment: czytaj każdy znak, usuń komentarze*/ void rcomment(int c) { int d; if (c == '/') if ((d = getchar()) == '*') in_comment(); /*początek komentarza*/ else if (d == '/') { putchar(c); /*drugi znak / */ rcomment(d); } else { putchar(c); /*to nie jest komentarz ;)*/ putchar(d); } else if (c == '\'' || c == '"') echo_quote(c); /*to początek stałej*/ else putchar(c); /*to nie jest komentarz*/ }
/* rcomment: read each character, remove the comments */ void rcomment(int c) { int d; if (c == '/') if ((d = getchar()) == '*') in_comment(); /* beginning comment */ else if (d == '/') { /* another slash */ putchar(c); rcomment(d); } else { putchar(c); /* not a comment */ putchar(d); } else if (c == '\'' || c == '"') echo_quote(c); /* quote begins */ else putchar(c); /* not a comment */ }
/* 阅读每个字节,移除注释 */ void rcomment(int c) { int d; if (c == '/') if ((d = getchar()) == '*') in_comment(); /* 开始注释 */ else if (d == '/') { putchar(c); /* 另一个斜杠 */ rcomment(d); } else { putchar(c); /* 不是注释 */ putchar(d); } else if (c == '\'' || c == '"') /* 引号中的内容原样输出 */ echo_quote(c); /* 引用开始 */ else putchar(c); /* 不是注释 */ }
/*rcomment:处理读入的每个字符,删除注释,首先是搜索起始标志*/ void rcomment(int c) { int d; /*用来储存c后面读入的一个字符*/ if(c=='/') /*当遇到一个/时,需要进行后续的判断*/ { if((d=getchar())=='*') /* 再读入一个字符,如果是*号,d已经读入,后续不需读入,而且必须输出 */ in_comment(); /* 说明进入注释,调用in_comment()函数寻找结束标志,删除注释 */ else if (d=='/') /* 如果又出现一个/ */ { putchar(c); /*则c一定不是属于注释,把c原样输出*/ rcomment(d); /*****递归调用rcomment函数,继续对d进行检测,而实际上只是c==‘/’的情况******/ } else /* 第一个/出现后,之后读入的一个字符,不是/也不是* */ { putchar(c); /*c,d均不属于注释,c,d均原样输出*/ putchar(d); } } else if(c=='\''||c=='"') /*出现单引号或双引号*/ echo_quote(c);/*调用echo_quote函数处理*/ else /*其他情况表示即不是/也不是引号*/ putchar(c);/*原样输出*/ }
// scan the next symbol void nextsym() { // continue until symbol found bool symfnd; do { symfnd = true; skipsep(); symptr = inptr; if (inLetters( ch)) // ident or reserved word { scanident(); } else { if (inDigits( ch)) // number scannum(); else { switch( ch) { case '"': strToMatch = '"'; scanstr(); break; case '\'': strToMatch = '\''; scanstr(); break; case '.': sym = per; nextchar(); if ( ch == '.') { sym = doubledot; nextchar(); } break; case ':': idassign(); break; case '<': // fall through to case '>', both call relop case '>': idrelop(); break; case '(': // check for comment nextchar(); if ( ch != '*') sym = lparen; else // now we know it's a comment { symfnd = false; nextchar(); rcomment(); } break; case EOF: sym = eof_sym; break; default: // then should be in one of the "special" chars (star, slash, etc.) sym = spsym[ ch]; nextchar(); break; } // end switch } // end if } // end do } while (!symfnd); // TODO //writesym(); } // end nextsym
int main() { rcomment(); return 0; }