【发布时间】:2022-01-26 01:20:38
【问题描述】:
我正在开发一个编译器,我只是希望能够读取文字 '\n',因为它是我的语言中的 ascii 值 (10)。
但实际上还有更多的转义序列,例如
\n,当 C++ 已经完全能够做到这一点时,我不想尝试自己解释所有这些。我基本上需要一种获取数组/字符串的方法:
const char* s1 = {'\\'/* a simple slash */, 'n', '\0'}; // "\\n"
std::string s2 = "\\x002b"; // {'\\', 'x', '0', '0', '2', 'b', '\0'}
并像 C/C++ 编译器那样对待它。
我想要一个 std 函数来完成它,或者如果在运行时我可以与 C++ 编译器交互并让它完成这项工作,就像这样:
char c1 = exec("'%s'", s1); // would return '\n' as one character (ascii 10)
char c2 = std::parse_char_literal(s2); // would return '+' (ascii 43)
谢谢。
【问题讨论】:
-
无法按照您想要的方式与编译器进行交互。它在运行时不存在。您必须自己解析字符串。例如,您必须手动将字符序列
'\' 'n'转换为数字 10。或者std::stoi()可以解析来自十六进制编码字符串的整数,例如"0x002b"。
标签: c++ char special-characters lexer