什么是计算宏和语法宏
what are computational macros and syntax macros
我正在读一篇题为"适合C++的面向对象预处理器"的论文。
"http://www.informatik.uni-bremen.de/st/lehre/Arte-fakt/Seminar/papers/17/An%20Object-面向%20C++.pdf的%20预处理器%20fit%20"
它讨论了三种不同类型的宏。
- 文本宏。//与C预处理器基本相同
- 计算宏//作为计算结果替换的文本
- 语法宏。//文本被表示语言一致结构的语法树所取代
有人能详细解释一下最后两种类型的宏吗。它说内联函数和模板是计算宏的例子,怎么回事?
看看Willink和Muchnick的论文引用的1966年Cheatham的原始论文,我总结了不同的宏观类型,如下所示:
- 文本宏在扫描和解析之前进行文本替换
- 语法宏在扫描和解析过程中进行处理。调用语法宏将用另一段AST替换宏调用
- 计算宏可以在扫描器和解析器构建AST之后的任何时候发生。关键是,在这一点上,我们不再处理任何文本,而是操纵AST的节点,即,我们处理的对象可能已经附加了语义信息
我不是C++内部专家,但我认为函数调用和实例化模板的内联是关于操作语法树的,同时,在它被注释了正确编译所需的语义信息之后,因为这两种信息似乎都假设知道很多在扫描和解析过程中还不知道的东西(比如类型信息和是否可以内联)。
By 2。听起来它们意味着一些计算是在编译时完成的,而在运行时执行的结果指令只涉及结果。我不认为内联函数特别代表这一点,但模板元编程正是这样做的。也是C++11中的CCD_ 1。
我认为3。也可以通过使用模板来表示。模板确实代表了一个语法树,实例化它需要采用通用语法树,填充参数化的未知位,并使用生成的语法树。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 1d 智能指针不适用于语法 (*)++
- 递归函数计算序列中的平方和(并输出过程)
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- QMetaObject invokeMethod的基于函数指针的语法
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 什么是计算宏和语法宏