从 yacc 解析器获取 clang/llvm 解析器
Get clang/llvm parser from yacc parser
我正在尝试在 llvm 中为 Promela 构建解析器。我有 SPIN 使用的解析器,它是使用 yacc 构建的,包括转到 yacc 的输入。有没有办法使用yacc解析器快速无痛地生成一个clang/llvm解析器?我将使用它来生成调用图并执行静态分析。
What I need to know now is whether I can use the existing Promela compiler, which was built with yacc, to quickly build a parser (and later, IR generator) using the llvm framework.
是的,您可以 re-use 现有的 YACC-grammar(如果您甚至想要现有的 AST)用于您的项目。 "Building a parser using the llvm framework" 虽然有点误导,因为 LLVM 与解析和 AST 没有任何关系。在您生成 LLVM IR 然后使用它之前,LLVM 不会进入它。
因此,您要么采用现有的 YACC 语法和现有的 AST,要么只采用语法并将操作替换为创建您自己定义的 AST 的操作。无论哪种方式,该部分都不会涉及 LLVM。
然后您将编写一个单独的阶段来遍历 AST 并使用 LLVM API 生成 LLVM IR,然后您可以 运行 LLVM 支持的所有转换和分析。
我正在尝试在 llvm 中为 Promela 构建解析器。我有 SPIN 使用的解析器,它是使用 yacc 构建的,包括转到 yacc 的输入。有没有办法使用yacc解析器快速无痛地生成一个clang/llvm解析器?我将使用它来生成调用图并执行静态分析。
What I need to know now is whether I can use the existing Promela compiler, which was built with yacc, to quickly build a parser (and later, IR generator) using the llvm framework.
是的,您可以 re-use 现有的 YACC-grammar(如果您甚至想要现有的 AST)用于您的项目。 "Building a parser using the llvm framework" 虽然有点误导,因为 LLVM 与解析和 AST 没有任何关系。在您生成 LLVM IR 然后使用它之前,LLVM 不会进入它。
因此,您要么采用现有的 YACC 语法和现有的 AST,要么只采用语法并将操作替换为创建您自己定义的 AST 的操作。无论哪种方式,该部分都不会涉及 LLVM。
然后您将编写一个单独的阶段来遍历 AST 并使用 LLVM API 生成 LLVM IR,然后您可以 运行 LLVM 支持的所有转换和分析。