C语言flex词法分析中如何将char*转换为对应实际char字符值
问题:C语言词法分析中带单引号的字符字面量字符串转实际char值
现有如下格式的字符串(为flex分词得到的字符字面量token文本):
const char *lex1 = "'a'"; // 打印输出为 'a' const char *lex2 = "'\\t'"; // 打印输出为 '\t' const char *lex3 = "'0'"; // 打印输出为 '0'
需要将这类char *类型的字符串转换为其对应的实际char类型值,预期转换效果如下:
char lex1_converted = 'a'; char lex2_converted = '\t'; char lex3_converted = '0';
目前初步思路是用多层if-else分支实现,想了解是否存在更合理的实现方案。
注:该问题为flex词法分析相关课后作业,仅需要理解方案所需的最少提示即可。
最少实现提示
- 第一步先处理边界:字符串首尾固定是单引号,直接截取两个单引号中间的内容作为待处理的有效载荷即可。
- 普通字符场景:如果有效载荷长度为1,直接取这一个字符就是目标值,对应示例里的
a、0这类无转义的普通字符。 - 转义字符场景:如果有效载荷长度为2、且第一个字符是反斜杠
\,不需要写多层if-else,直接维护一个长度极短的转义映射表(键为转义符后面的字符,值为对应的实际转义char值,比如t对应制表符\t、n对应换行符\n、\对应反斜杠本身、'对应单引号本身),查表即可得到结果,代码可读性和可维护性远高于分支判断。 - 更贴合flex的优化思路:你可以直接在flex的词法规则里拆分普通字符、转义字符的匹配规则,在匹配到token的时候就直接完成转义计算,不需要等拿到完整带单引号的字符串后再做二次解析。
内容的提问来源于stack exchange,提问作者swamp
相关产品推荐
相关产品推荐

