【问题标题】:How can you add a new keyword to clang, a keyword that would be treated as main?如何向 clang 添加一个新关键字,一个将被视为主要的关键字?
【发布时间】:2011-01-19 14:59:11
【问题描述】:

如何在 clang 中添加新关键字? new 关键字应该是函数限定符。声明部分会去哪里?

谢谢。

【问题讨论】:

  • 听起来你需要深入了解 clang/LLVM 的解析和词法分析部分并从那里开始,我怀疑你可能会从 clang 邮件列表中获得更好的帮助
  • 我已经编辑了 IdentifierTabe.cpp,并将新关键字添加到 TokenKinds.def 就解析和词法分析而言,我无法从 C 中找到 main 的行为,因为我不知道在哪里定义。
  • One of the disadvantages of Clang versus Elsa 是 Elsa 完全基于语法规则使用了一个很好的解析器。我一直想知道为什么 Clang 开发人员没有选择以同样的方式编写他们的解析器......
  • @peoro,Elsa 非常慢,而 Clang 及其可怕的手工递归下降解析器比 GCC 更快。

标签: c++ c clang


【解决方案1】:

您必须将它添加到 include/clang/Basic/TokenKinds.def,然后将新案例添加到 ParseDeclarationSpecifiers(...)。

可能更简单的选择是定义一个新属性,然后使用

#define your_new_qualifier __attribute__((your_new_attribute))

否则,您必须将此限定符支持添加到 AST,这可能容易出错,而属性会在同一函数的各种声明中自动传播。

【讨论】:

  • 我在哪里定义它的行为?除了代码之外,是否有任何关于在何处实现行为的文档?
  • 我还没有看到任何关于 Clang 这个特定方面的文档,但是复制和粘贴类似的东西很容易——在你的情况下,这将是“内联”的实现,例如(这个一个在 AST 中),或者第二个选项的地址空间属性。
  • 我们需要在哪个文件中#define your_new_qualifier __attribute__((your_new_attribute)) 以及在哪里添加“your_new_attribute”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
相关资源
最近更新 更多