2010-02-24 76 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字符。但是,这并不意味着这些约定适合您正在编译的语言。

相关问题