ocaml - 从 LLVM 字符串常量中获取字符串

标签 ocaml llvm

我正在使用 LLVM 绑定(bind)来读取 OCaml 中的 LLVM 位码文件。在该文件中有一个全局字符串常量定义如下:

@.str1 = private unnamed_addr constant [6 x i8] c"x > y\00", align 1

我有一个 llvalue 对应于这个常量,我想从中获取字符串 "x > y"。我可以做的一件事是使用 string_of_llvalue (global_initializer the_constant) 获取字符串 "c\"x > y\\00\"",然后提取之间的部分引号,然后解析该部分中的转义序列。然而,这对我来说似乎不是一个很好的解决方案。

C++ API 具有函数 constantDataSequential::getAsString,我可以使用它来访问常量的字符串值,但我终究无法弄清楚如何使用OCaml 绑定(bind)。

最佳答案

在提问时,解析 string_of_llvalue 的结果确实是除了为 getAsString 编写自己的绑定(bind)之外的唯一选择。

然而,在更新的 OCaml 绑定(bind)版本中,这可以通过 string_of_const 更容易地完成。如果给定的 llvalue 是字符串常量且 None,它需要一个 llvalue 并返回一个包含字符串内容的 Some否则。

关于ocaml - 从 LLVM 字符串常量中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086659/

相关文章:

c - 如何从多个源生成单个 LLVM IR

syntax-error - OCaml - 获取关于_Syntax error_ 是什么的提示

programming-languages - 为什么 SML 和 OCaml 被视为 ML 的方言?机器学习的定义是什么?

cmake/配置-ix.cmake :401 (get_host_triple) error when trying to build LLVM with CMake on Windows

c++ - 铛++ : fatal error: 'unistd.h' file not found

llvm - 使用 Bazel 构建 LLVM

ocaml - 将惰性图转换为不带突变的严格图 - OCaml

list - 将哈希表转换为 OCaml 中的对(键,值)列表

algorithm - 使用 OCaml 中的列表找到下一个最大的数字

c++ - Clang 未在 -g 标志上生成调试信息