我不清楚爲什麼你要在最後加上}
,所以這個腳本沒有,但是你可以很容易地將它添加回你的腳本。
此腳本不是通用的C語言分析器。但它確實解決您的輸入(但不是我):
s%/\*.*\*/% %g
/^\/\*/,/^\*\/$/ d
第一行或多或少涉及單行註釋,只要他們不是太複雜(如嵌入一個字符串中文字或多字符常量,或者在單行上有幾個這樣的註釋)。第二個是你原來的多行註釋解析器。它的約束條件是可以的,其中之一就是它不會檢測到一般性評論 - 只有那些從第1列開始,並在評論結束標記中完成的整體評論。
爲您輸入的這個擴展版本:
blurble
flup
/* This program read two integer numbers from the
keyboard and prints their product.
written by:
Date:
*/
fangdoodle
wotsit
/* This program read two integer numbers from the
keyboard and prints their product.
written by:
Date:
*/
int main(void)
{
/* statements */
scanf ("%d",&number1);
scanf ("%d",&number2);
result = number1 * number2;
printf ("%d",result);
return 0;
} /* main */
char /*far*/*deviousness(/*const*/ char *str)
{
enum { MASSIVE = 128 };
char *result = malloc(MASSIVE);
char cmp[] = "/* not a comment */";
for (int i = '/*'; i < '*/'; i++)
printf("%d\n", i); /* Note
this is not deleted */
snprintf(result, MASSIVE, "%s%s%s %s", "/*", str, "*/", cmp);
return result;
}
/*
* This style of comment
* is not handled properly.
*/
char *maliciously(char *deleted)
{
return deleted + 4;
}
/* Oh why?
*/
whooptido!
輸出是:
blurble
flup
fangdoodle
wotsit
int main(void)
{
scanf ("%d",&number1);
scanf ("%d",&number2);
result = number1 * number2;
printf ("%d",result);
return 0;
}
char char *str)
{
enum { MASSIVE = 128 };
char *result = malloc(MASSIVE);
char cmp[] = " ";
for (int i = ' '; i++)
printf("%d\n", i); /* Note
this is not deleted */
snprintf(result, MASSIVE, "%s%s%s %s", " ", cmp);
return result;
}
whooptido!
試圖用精確到sed
消除空調風格的評論是非常,非常努力。對於簡單的情況,你可以或多或少地處理它,但是正確地完成這項工作,識別字符串和字符等是非常困難的。這就是你進入像惡評前:
/\
\
* This *\
\
//??/
* Trigraphs are going to go from C++17 *??/
??/
/
憐貧編譯器作家誰必須確保他們的編譯器並妥善處理這樣的廢話。
適用於Mac OS X(BSD)'sed'。大括號確實沒有必要(只需在行的範圍後面加上'd'),但它們也不會損壞。如果問題出在註釋後面的數據被移除,問題將出現在'* /'末尾註釋行上的尾部素材(空格或製表符)。你在哪個平臺上?這個文件有什麼特別的地方嗎?你用'od -c'還是十六進制轉儲來看它?您是否嘗試通過將此問題的評論複製並粘貼到全新文件中,然後在該文件上運行命令來重新創建文件? –
感謝您的回覆。請參閱更新,因爲我錯過了在代碼中添加額外的行。 – asad
有什麼問題?新文件得到的評論比你想要的更多,但這是因爲你沒有處理所有可能的評論配置。你需要寫一個更仔細的腳本。你想用單行註釋完成什麼?換成空白?留下一個?你應該真的顯示你得到的輸出和你想得到的輸出,但是你的正則表達式「起作用」,即使你不打算按照你要求的做法。 –