c - 如何在 Bison 中解析 HEX 数字

标签 c compilation bison flex-lexer

我有一个我想从事的项目,我的首要任务是构建一个 deskCalculator。我希望计算器能够解析 HEX 数字。以下是有问题的部分。

| HEX {$$ = strtol((char *)$1 , (char **)'\n', 16); }

上面定义了一个十六进制标记,在 lex 文件中正则表达式定义为

hex  [a-f0-9]+

问题出在 strtol 函数级别。请帮我。 谢谢。

最佳答案

编译器的提示是有充分理由的,而强制转换几乎从来都不是正确的答案。

strtol 将指向转换字符串后第一个字符的指针存储到 end 参数中。因为 10('\n' 的值)可能不是您的有效地址,所以当 strtol 尝试修改它。如果您对字符串的其余部分不感兴趣,可以传递 NULL:

| HEX {$$ = strtol((char *)$1 , NULL, 16); }

关于c - 如何在 Bison 中解析 HEX 数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806289/

相关文章:

c - MPI_Finalize() 没有完成

尝试解析十六进制字符串时崩溃

通过C连接oracle DB

compilation - 如何在 OpenShift 上编译和安装源代码?

c - Bison:当我尝试在函数语法规则中添加操作时,出现段错误 11

C getopt 不读取所有参数

java - 了解如何使用 Jython 的问题

parsing - 转移/减少 Bison 的冲突

c++ - Bison :存储自定义类

compilation - 三地址码(TAC/3AC)