从yytext获取ASCII值

时间:2018-05-03 20:29:38

标签: c++ pointers compiler-construction flex-lexer char-pointer

这可能是一个愚蠢的问题但是我坚持这个。

我正在编译器上做作业。我必须匹配一个字符文字。它被定义为用'所包含的任何单个字符。 ',除了' \ t',' \ n',' \ a'在我的lex文件中,我编写了一个匹配它的模式。当模式匹配输入时,它将其存储在yytext中。现在yytext在char指针中。它将价值吸引为' \ t'。 (4个个人字符)。但是我在符号表中保存了这个字符的ascii值。我正在努力解决这个问题。

我有以下的char指针。

 char *yytext = new char[5];
 *(yytext + 0) = '\'';
 *(yytext + 1) = '\\';
 *(yytext + 2) = 't';
 *(yytext + 3) = '\'';
 *(yytext + 4) = '\0';

 cout << yytext << endl; // prints '\t'

现在我想要做的就是获得&#39; \ t&#39;单个字符中的ascii字符。类似的东西:

char ch = '\t';

我该怎么做?我可以用蛮力的方法做到这一点,但有没有简单明了的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

  

但是我如何以简单的方式从char指针解析它呢?

使用map,其中key是字符串,值是对应的char:

#include <iostream>
#include <string>
#include <unordered_map>

int main()
{
    std::unordered_map<std::string, char> convert = { {"'\t'", '\t'},{ "'\n'", '\n' },{ "'\r'", '\r' } };

    const char *ch1 = "'\t'";
    const char *ch2 = "'\n'";

    std::cout << 1 << convert[ch1] << 2 << convert[ch2] << 3 << std::endl;

    return 0;
}

工作演示:https://ideone.com/rsSKXL

1   2
3