2010-02-24 74 views
1

我正在C編寫一個編譯器,需要獲取源代碼文件中定義的字符的ASCII值。對於普通字母這很簡單,但有什麼辦法將字符串「\ n」轉換爲C中'\ n'的ASCII碼(需要處理所有字符)?如何將字符串轉換爲C中的字符

歡呼聲

回答

1

我正在寫一個編譯器使用C

可能不是一個好主意,做所有原C.這是更好的使用像野牛的東西來處理初步分析是。

也就是說,處理\*轉義的最佳方法就是查找每個轉義轉換成的表。

0

您將需要編寫自己的解析器/轉換器。轉義序列列表可以在許多地方在線找到。解析C風格的語法是非常困難的,因此您可能還希望查看現有的免費實現,例如Clang

+0

Boost.Spirit Qi或Lex也可能是解析複雜語言的好選擇。 – Tronic 2010-02-24 02:19:31

3

如果字符串是一個字符,你可以建立索引:

char *s = "\n"; 
int ascii = s[0]; 

但是,如果你的系統中使用的字符集不是ASCII上,上面不會給你一個ASCII值。如果你需要確保你的代碼運行在這樣罕見的機器上,你可以建立一個ASCII表並使用它。

如果在另一方面,你有兩個字符,即

char *s = "\\n"; 

那麼你可以做這樣的事情:

char c; 
c = s[0]; 
if (c == '\\') { 
    c = s[1]; /* assume s is long enough */ 
    switch (c) { 
     case 'n': return '\n'; break; 
     case 't': return '\t'; break; 
     ... 
     default: return c; 
    } 
} 

上述假設您目前的編譯器知道什麼'\n'手段。如果沒有,那麼你仍然可以做到。爲了找到如何去做,以及一個引人入勝的故事,請參閱Ken Thompson的Reflections on Trusting Trust

+0

我收集他實際上有字符串「\\ n」,他想轉換... – Tronic 2010-02-24 02:07:51

+0

是的,這個問題並不清楚,但我已經更新了我的答案,以涵蓋這種情況。謝謝! – 2010-02-24 02:09:56

0

你將需要自己實現這個。原因是你在做什麼取決於你正在編譯的語言的字符串文字語法! (您的編譯器在C中實現的事實並不重要。)

對於跨越多種語言的字符串文本,存在常規轉義序列;例如\n通常表示ASCII NewLine字符。但是,這並不意味着這些約定適合您正在編譯的語言。

相關問題