什么是计算宏和语法宏

what are computational macros and syntax macros

本文关键字:语法 计算 什么      更新时间:2023-10-16

我正在读一篇题为"适合C++的面向对象预处理器"的论文。

"http://www.informatik.uni-bremen.de/st/lehre/Arte-fakt/Seminar/papers/17/An%20Object-面向%20C++.pdf的%20预处理器%20fit%20"

它讨论了三种不同类型的宏。

  1. 文本宏。//与C预处理器基本相同
  2. 计算宏//作为计算结果替换的文本
  3. 语法宏。//文本被表示语言一致结构的语法树所取代

有人能详细解释一下最后两种类型的宏吗。它说内联函数和模板是计算宏的例子,怎么回事?

看看Willink和Muchnick的论文引用的1966年Cheatham的原始论文,我总结了不同的宏观类型,如下所示:

  1. 文本宏在扫描和解析之前进行文本替换
  2. 语法宏在扫描和解析过程中进行处理。调用语法宏将用另一段AST替换宏调用
  3. 计算宏可以在扫描器和解析器构建AST之后的任何时候发生。关键是,在这一点上,我们不再处理任何文本,而是操纵AST的节点,即,我们处理的对象可能已经附加了语义信息

我不是C++内部专家,但我认为函数调用和实例化模板的内联是关于操作语法树的,同时,在它被注释了正确编译所需的语义信息之后,因为这两种信息似乎都假设知道很多在扫描和解析过程中还不知道的东西(比如类型信息和是否可以内联)。

By 2。听起来它们意味着一些计算是在编译时完成的,而在运行时执行的结果指令只涉及结果。我不认为内联函数特别代表这一点,但模板元编程正是这样做的。也是C++11中的CCD_ 1。

我认为3。也可以通过使用模板来表示。模板确实代表了一个语法树,实例化它需要采用通用语法树,填充参数化的未知位,并使用生成的语法树。