从 yytext 获取 ASCII 值
Get ASCII value from yytext
这可能是个愚蠢的问题,但我坚持这个问题。
我正在做关于编译器的作业。我必须匹配一个字符文字。它被定义为用 ' ' 括起来的任何单个字符,但 '\t'、'\n'、'\a' 等除外。在我的 lex 文件中,我编写了一个模式来匹配它。当模式与输入匹配时,它会将其存储在 yytext 中。现在 yytext 在一个 char 指针中。它将值捕获为“\t”。 (4 个单独的字符)。但是我已经在我的 Symbol table 中保存了这个字符的 ascii 值。我正在为此苦苦挣扎。
我有以下字符指针。
char *yytext = new char[5];
*(yytext + 0) = '\'';
*(yytext + 1) = '\';
*(yytext + 2) = 't';
*(yytext + 3) = '\'';
*(yytext + 4) = '[=10=]';
cout << yytext << endl; // prints '\t'
现在我要做的是在单个字符中获取 '\t' ascii 字符。类似于:
char ch = '\t';
我该怎么做?我也许可以通过蛮力方法来做到这一点,但有没有简单直接的方法来实现这一点?
But how do I parse it from the char pointer in an easy way ?
使用map,key为字符串,value为对应的字符:
#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
这可能是个愚蠢的问题,但我坚持这个问题。
我正在做关于编译器的作业。我必须匹配一个字符文字。它被定义为用 ' ' 括起来的任何单个字符,但 '\t'、'\n'、'\a' 等除外。在我的 lex 文件中,我编写了一个模式来匹配它。当模式与输入匹配时,它会将其存储在 yytext 中。现在 yytext 在一个 char 指针中。它将值捕获为“\t”。 (4 个单独的字符)。但是我已经在我的 Symbol table 中保存了这个字符的 ascii 值。我正在为此苦苦挣扎。
我有以下字符指针。
char *yytext = new char[5];
*(yytext + 0) = '\'';
*(yytext + 1) = '\';
*(yytext + 2) = 't';
*(yytext + 3) = '\'';
*(yytext + 4) = '[=10=]';
cout << yytext << endl; // prints '\t'
现在我要做的是在单个字符中获取 '\t' ascii 字符。类似于:
char ch = '\t';
我该怎么做?我也许可以通过蛮力方法来做到这一点,但有没有简单直接的方法来实现这一点?
But how do I parse it from the char pointer in an easy way ?
使用map,key为字符串,value为对应的字符:
#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