作者:手机用户2502856053 | 来源:互联网 | 2023-10-12 19:53
我想问一下构建解析器以识别C / C ++代码中的自定义编译指示的最简单方法是什么。是的,一个简单的bash脚本可以做到,但是我想知道是否有任何正式的方法可以通过Clang或LLVM完成?我试图检查Clang AST,但找不到任何实用程序。
例如:
int foo1(){
#pragma hi k=1
...
}
int foo2(){
#pragma hello k=7
...
}
我希望通行证返回以下内容:
function foo1 has hi and k=1
function foo2 has hello and k=7
谢谢。
杂物处理需要在以下几部分中完成:
- 在ParsePragma.cpp文件中添加一个处理程序(有一些执行此操作的示例)。在此步骤中,您可以逐个令牌解析pragma令牌并将相应的信息存储在AST中(这可能是将数据从此阶段传输到后续阶段的最佳方法)。
- 如果您需要在处理LLVM IR的过程中处理此信息,则需要将先前存储在AST中的信息附加到与IR相关的类中,在您的情况下,看来是 llvm :: Function 是保留该位置的地方。在此过程中,需要更新“ lib / AsmParser / LLParser.cpp ”,“ lib / AsmParser / LLLexer.cpp ”和“ lib / IR / AsmWriter.cpp ”文件。这将允许读写存储在IR中的信息。
最后,如果您需要将IR中保留的其他信息写入汇编文件中,则需要相应地更新' lib / CodeGen / AsmPrinter / AsmPrinter.cpp '文件。