草庐IT

abstract-syntax-tree

全部标签

c++ - 铛 libTooling : How to find which header an AST item came out of?

在网上找到的clang工具示例总是在玩具示例上运行,这些示例通常都是非常简单的C程序。我正在构建一个对C++代码执行源到源转换的工具,这显然是一项非常非常具有挑战性的任务,但clang可以胜任这项任务。我现在面临的问题是,clang为任何使用STL的C++代码生成的AST非常庞大。例如,我有一些C++代码,clang++-ast-dump...|wc-l是67,018行可怕的AST官话!其中99%是标准库的东西,我打算在我的源到源元编程任务中忽略它们。所以,为了实现这一点,我想简单地过滤掉文件。假设我只想查看正在分析的项目header中的类定义(并忽略所有标准库header的内容),我

c++ - bisonc++ 多态继承

我正在尝试从野牛语法构建AST。Bison正确生成了解析器,但是当我尝试使用一些数学运算解析示例代码时,打印出以下错误:[Fatal]calling`.get()',butTagINTisencountered.调试后我注意到问题出在expr非终端中,产生式如下:expr:...|operator{$$=$1;}并且operator本身有以下产生式:operator:...|INTEGER{$$=newast::expression::IntASTNode(std::stoi(d_scanner.matched()));}我正在使用多态语义类型,expr和operator被标记为响应E

c++ - 从 Clang AST 中的 CXXConstructExpr 中检索模板参数

假设我有一个这样的变量声明:std::vectormyVector(1);这在ClangAST中表示为CXXConstructExpr。我有一个匹配器可以找到此CXXConstructExpr,但我想从中提取MyType的声明。我尝试了各种方法,但似乎没有任何效果:constCXXConstructExpr*construct=Result.Nodes.getNodeAs("expr");construct->getConstructor()->getTemplateSpecializationArgs()//Alwaysnullptrconstruct->getConstructor

c++ - 在 Visual Studio 中从 C++ 代码中检索 AST

有什么方法可以使用MicrosoftVisualStudio编译器从C++代码生成AST?我想到了类似于来自clang的-ast-dump选项的东西。 最佳答案 我不相信MSVC会生成您可以访问的AST。您可以从我们的DMSSoftwareReengineeringToolkit获取MSVC的AST.看这个DMS-generatedexampleC++AST的。 关于c++-在VisualStudio中从C++代码中检索AST,我们在StackOverflow上找到一个类似的问题:

c++ - boost::property_tree 无一异常(exception)

我需要解析一些INI文件。为此,我尝试使用boost::property_tree,但在我的系统中不允许出现异常。如何在使用boost::property_tree时禁用异常支持?如果没有办法做到这一点,非常感谢对其他图书馆的任何建议。在@sehe的回答后,我尝试了这段代码,但是没有成功:#include#include#include#includenamespaceboost{voidthrow_exception(std::exceptionconst&e){std::cerr编译行代码使用以下参数:-c-DBOOST_USER_CONFIG=""-DBOOST_NO_EXCEP

CMake 添加子目录错误 : "When specifying an out-of-tree source a binary directory must be explicitly specified"

我的目录结构如下:rootlibACMakeLists.txtClassA.cpplibBCMakeLists.txtClassB.cppsharedCodeenums.hAbstractClass.hCMake文件中如何包含sharedCode目录?这样classA(在libA中)和classB(在libB中)都可以使用enums.h和AbstractClass.h?在我尝试使用的CMakeLists.txt中:add_subdirectory(../sharedCode)但它给出了错误add_subdirectorynotgivenabinarydirectorybutthegiv

c++ - 与 boost::property_tree XML 解析器一起使用时 boost::coroutine 库崩溃

我正在使用Simple-Web-Server用于创建将XML转换为JSON的简单Web服务的库,反之亦然。反过来,它使用了几个boost库以及其中的boost::coroutine。对于XMLJSON转换,我使用boost::property_tree库进行中间表示。这是代码:#include#include#include#defineBOOST_SPIRIT_THREADSAFE#include#include#includeusingnamespacestd;usingnamespaceboost::property_tree;usingHttpServer=SimpleWeb:

c++ - VisitDecl 与 TraverseDecl(Clang RecursiveASTVisitor)

我已阅读此链接,但仍不完全理解TraverseDecl和VisitDecl(及其用例)之间的区别http://clang.llvm.org/doxygen/classclang_1_1RecursiveASTVisitor.html在编写我的RecursiveASTVisitor时我应该覆盖哪个方法? 最佳答案 TraverseDecl告诉前端库的ASTConsumer从AST递归访问声明。然后调用VisitDecl,您可以在其中提取相关信息。点击这两个链接以获取更多详细信息和一个简单的检查器示例:http://clang.llvm

c++ - 在构建 kd-Tree 时对 'median' 的定义感到困惑

我试图构建一个kd树来搜索一组点,但我对维基百科文章中“中位数”的使用感到困惑。为了便于使用,维基百科文章将构造kd-tree的伪代码表述为:functionkdtree(listofpointspointList,intdepth){ifpointListisemptyreturnnil;else{//Selectaxisbasedondepthsothataxiscyclesthroughallvalidvaluesvarintaxis:=depthmodk;//Sortpointlistandchoosemedianaspivotelementselectmedianbyaxis

c++ - Instruments Call Tree 破坏了 R、C++ 和 Fortran 的混合

我正在尝试针对CPU时间分析OpenMx的一个函数,一个包含C++和Fortran代码的R包。我的操作系统是OSX10.10。我读过section关于R手册中的这个主题。本款和thispost带我试试Instruments。这是我做的打开的工具选择时间分析器模板按下记录使用RStudio启动我的R脚本我得到以下输出:.命令行工具sample返回相同的输出。问题是它看起来像omxunsafedgemm_会直接从主线程调用。但是,这是一个低级Fortran函数。它总是由名为omxDGEMM的C++函数调用。在此示例中,omxDGEMM首先由omxCallRamExpection调用(因此几