从yacc解析器获取clang / llvm解析器

时间:2019-07-05 11:38:05

标签: parsing clang llvm yacc promela

我正在尝试为llvm中的Promela构建解析器。我有解析器SPIN使用,它是使用yacc构建的,包括输入yacc的输入。有没有办法使用yacc解析器快速而轻松地生成clang / llvm解析器?我将使用它来生成调用图并执行静态分析。

1 个答案:

答案 0 :(得分:1)

  

我现在需要知道的是,我是否可以使用yacc构建的现有Promela编译器,以使用llvm框架快速构建解析器(以及后来的IR生成器)。

是的,您可以为项目重新使用现有的YACC语法(如果需要甚至可以使用现有的AST)。尽管LLVM与解析和AST没有任何关系,但“使用llvm框架构建解析器”有点误导。除非生成LLVM IR,然后使用它,否则LLVM不会进入它。

因此,您可以采用现有的YACC语法和现有的AST,或者仅采用该语法,并用创建自己定义的AST的动作替换操作。无论哪种方式,该部分都不会涉及LLVM。

然后,您将编写一个单独的阶段,该阶段将遍历AST,并使用LLVM API生成LLVM IR,然后您可以在其上运行LLVM支持的所有转换和分析。