【问题标题】:Enable only syntactic parsing in clang在 clang 中仅启用语法解析
【发布时间】:2020-01-27 21:07:14
【问题描述】:

我正在尝试实现一个使用 ASTMatcher API 进行句法分析的 clang 工具。我正在尝试找出如何为 clang 指定额外的标志以禁用语义检查。我知道 clang 构建了一个巨大的 AST,其中包括系统头文件。有什么方法可以在禁用导致未知类型错误的语义检查的同时解析源代码?我只想分析给定文件源代码的语法完整性。到目前为止,我已经尝试通过修改DSL来检查匹配的代码是否来自主文件来解决这个问题:

cxxRecordDecl(isExpansionInMainFile()).bind("class");

但这并不能阻止 clang 查看头文件。

【问题讨论】:

    标签: clang llvm-clang libtooling clang-ast-matchers


    【解决方案1】:

    不幸的是,没有 sema 就不可能使用简单的句法分析。问题不在于 clang,而在于所有 C++ 解析器。如果没有同时进行语义分析,any 句法分析是模棱两可的。该问题已在 this answer 中得到妥善解决。

    【讨论】:

    • 感谢您的澄清!有没有办法在 ASTMatchers 中生成 --fsyntax-only 解析树?
    • 你可以使用SyntaxOnlyAction:clang.llvm.org/doxygen/… 基本上这(和--fsyntax-only)意味着你得到了AST(带有语义分析)并且不要走得更远( IR 生成、优化等)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2020-06-30
    相关资源
    最近更新 更多