Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何向clang添加一个新关键字,一个将被视为主要关键字的关键字?_C++_C_Clang - Fatal编程技术网

C++ 如何向clang添加一个新关键字,一个将被视为主要关键字的关键字?

C++ 如何向clang添加一个新关键字,一个将被视为主要关键字的关键字?,c++,c,clang,C++,C,Clang,如何将新关键字添加到clang?new关键字应该是一个函数限定符。申报部分会去哪里 谢谢。您必须将其添加到include/clang/Basic/TokenKinds.def中,然后向ParseDeclarationSpecifiers(…)添加一个新的大小写 可能更简单的选择是定义一个新属性,然后使用 #定义你的_新_限定符u属性u((你的_新_属性)) 否则,您必须将此限定符支持添加到AST,这可能容易出错,而属性会自动在同一函数的各种声明之间传播。听起来您需要深入到clang/LLVM的解

如何将新关键字添加到clang?new关键字应该是一个函数限定符。申报部分会去哪里


谢谢。

您必须将其添加到include/clang/Basic/TokenKinds.def中,然后向ParseDeclarationSpecifiers(…)添加一个新的大小写

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

#定义你的_新_限定符u属性u((你的_新_属性))


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

听起来您需要深入到clang/LLVM的解析和词法分析部分,然后从那里开始,我想你可能会从叮当作响的邮件列表中得到更好的帮助。我编辑了IdentifierTabe.cpp,并在TokenTypes.def中添加了新的关键字,从解析和词法分析来看,我无法从C中找到main的行为,因为我不知道它是在哪里定义的。Elsa使用的解析器完全基于语法规则。我一直想知道为什么Clang开发人员没有选择以同样的方式编写解析器…@peoro,Elsa非常慢,而带有可怕的手工递归下降解析器的Clang比GCC更快。我在哪里定义它的行为?除了代码之外,还有关于行为在何处实现的文档吗?我没有看到任何关于Clang这一特定方面的文档,但是复制和粘贴类似的东西很容易——在您的情况下,它将是“inline”的实现,例如(这一个在AST中),或者第二个选项的地址空间属性。我们需要在哪个文件中定义您的\u new\u限定符\u\u属性\u((您的\u new\u属性))以及在哪里添加“您的\u new\u属性”