編譯器處理轉義符?
01-04
請問各位,究竟如何判斷一個字元串內是否有轉義字元呢?(本人用C++寫了一句
if(a[i] == "\") cout &<&< "yes";
似乎行不通·· )
如果是讀取不了的話?編譯器的詞法分析又是如何處理轉義字元的呢?
題主沒有表達清楚是要正向還是逆向處理轉義字元。
正向:把兩個字元 n 識別為一個轉義字元 new line
逆向:把一個字元 new line 識別為一個需要轉義的字元,輸出兩個字元 n假設是正向:
題主莫非是用這樣的代碼來測試的?string a = "test line 1
test line 2
test line 3";
for (int i = 0; i &< a.length(); i++) {
if (a[i] == "\") cout &<&< "yes" &<&< endl;
}
這樣當然找不到任何轉義字元,因為在在源碼里的
字面量(兩個字元)都已經被編譯器正向處理過一次變成了new line(一個LF字元),所以a里已經沒有任何""字元了。
test line 1
test line 2
test line 3
那我們要在一個小測試程序里模擬這個輸入的話,應該寫:
"test line 1\ntest line 2\ntest line 3"
這樣得到的字元串才跟源碼文件里的原始文本一致。其實就是人肉逆向處理一次來對抗編譯器做的那一次正向處理。
然後該怎麼做題主應該能自己弄清楚了。
假設是逆向:
總共只有那麼多個字元需要轉義。查語言規範把所有需要轉義的字元放進一個表裡匹配一下就好。一個轉義符是一個字元,所以你不能通過檢測的存在來檢測轉義符的存在
你可以檢查ascii碼,那幾個需要轉義的符號的ascii碼是確定的
推薦閱讀:
※Android上ARM本地庫是如何運行在其他CPU架構上的?
※Linux/Unix中查看一個C/C++大工程中所有函數的調用順序,有哪些方法?
※編譯器的自舉原理是什麼?
※從哪裡可以得到包含了Python3所支持的所有語法的測試用例?