gpt4 book ai didi

c++ - 使用 clang 作为库来解析扩展了一些 C++ 元素的 OpenCL 代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:26 27 4
gpt4 key购买 nike

我目前正在研究源到源编译器,它将 OpenCL 超集中编写的代码转换为“普通”OpenCL。我很想使用clang作为一个库来解析和分析源代码。特别是,我真的需要所有可用的类型信息,并且我希望有一个 AST 来利用 clang 的重写功能。

幸运的是,需要解析的 OpenCL 超集实际上是 OpenCL 和 C++ 之间的“混合体”,即代码基本上是用一些 C++ 东西扩展的 OpenCL。详细地说,函数定义之前可能有模板注释,并且可能有包含方法(包括运算符定义)的结构。

我希望我可以使用 clang 来解析这种语言,因为 clang 解析器能够解析所有这些结构。但是,我不确定如何(如果可能的话)告诉 clang 一次解析 OpenCL 和 C++ 构造。如果可能的话,我真的想避免接触 clang 代码库,但我更愿意将 clang 用作库。也许可以设置 clang 的 LangOptions 类的适当实例,告诉 clang 解析所有这些结构?

关于如何让 clang 解析 OpenCL 和 C++ 之间的这种混合,有什么想法吗?感谢您提供任何帮助,并提前致谢!

最佳答案

您正在尝试混合两种不同的前端,包括解析和名称解析。

我认为您的旅程很艰难。关键问题是你试图将不费吹灰之力的东西粘合在一起,使它们变得可粘合。这通常会导致集成 hell 。出于同样的原因,您看不到人们使用 Fortran 和 C++ 执行此操作。

首先,您会发现您必须定义 C++ 扩展如何与 OpenCL 扩展交互的语义。如果查看 C++ 标准,您会发现 600 页关于 C++ 如何与自身交互的委员会争论的结果。因此,除非您可以定义一个极其简单的交互,否则您将很难了解您的混合 OpenCL/C++ 程序意味着

您的第二个问题是将 C++ 的 Clang 解析机制(AFAIK 手写代码)与 OpenCL 的 Clang 解析机制交织在一起(对此一无所知,但假设它遵循 C++ 风格)。没有明显充分的理由相信您可以轻松地选择这些来交错。它可能会很好;只是我不想打赌。

下一个您可能遇到麻烦的地方是为 union 语言构建 AST。也许是这样的情况,Clang 已经为 C++ 和 OpenCL 定义了 AST 节点,其方式很容易组合成 union Clang/OpenCL 树。由于节点类型是手动选择的,并且没有特定的理由将它们设计为一起工作,因此它们是否会很好地组合也不是很明显。

你的最后一个任务,给定一个“有效”的 OpenCL/C++ 树,将其转换为 OpenCL。实际上,您将如何将 C++ 模板(或任何通用 C++ 代码)扩展为 OpenCL 代码?

[检查我的简历是否有另一个系统 DMS,它可能更适合这项任务;它为多种语言提供了统一的基础设施,这将使其中的一些工作变得更容易。与您尝试做的有点相似,我们使用 DMS 将 C++ 与 F90 和 APL 概念混合,以便在原型(prototype) Vector C++ 中轻松表达 vector 运算,但我们没有尝试为所有的人保留 F90 和 APL 语法和语义以上原因]。

在你的游行中下雨不是我的目的;不讲道理的人取得进步。只要确保您了解自己承担的任务有多大。

关于c++ - 使用 clang 作为库来解析扩展了一些 C++ 元素的 OpenCL 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com