C++ Boost Spirit:将语法拆分为多个编译单元
因此,我成功地使用了计算器示例,将相对简单的语法的编译速度提高了约50%(?)。 可以找到计算器示例。然而,在这个例子中有一件事我并没有真正理解,那就是:C++ Boost Spirit:将语法拆分为多个编译单元,c++,boost,grammar,boost-spirit,C++,Boost,Grammar,Boost Spirit,因此,我成功地使用了计算器示例,将相对简单的语法的编译速度提高了约50%(?)。 可以找到计算器示例。然而,在这个例子中有一件事我并没有真正理解,那就是: #包括“calc6c.hpp” //这并不是真正意义上的。它的唯一目的是 //实例化语法的构造函数。 void实例化_语句() { typedef std::string::const_iterator iterator_type; std::矢量码; 报表g(代码); } 我发现这个注释真的很让人困惑,尤其是当我在代码中尝试它时(使用我的
#包括“calc6c.hpp”
//这并不是真正意义上的。它的唯一目的是
//实例化语法的构造函数。
void实例化_语句()
{
typedef std::string::const_iterator iterator_type;
std::矢量码;
报表g(代码);
}
我发现这个注释真的很让人困惑,尤其是当我在代码中尝试它时(使用我的语法),是否包含这样的函数并不重要。无论是否使用此编译单元,我都可以成功编译。
在我看来,语法是在ll上实例化的。74英寸:
typedef std::string::const_iterator iterator_type;
typedef语句;
V机器马赫数;//我们的虚拟机
std::矢量代码;//我们的虚拟机代码
报表计算(代码);//我们的语法
那么为什么需要函数*实例化_语句*?或者更确切地说:拥有一个包含*instantiate_statement*函数的编译单元与编译最终程序时没有这样的编译单元有什么区别
另外,我看了很多地方,但似乎没有一页介绍这个例子——或者,就这一点而言,一个将语法拆分为多个编译单元的更通用的示例——更详细,该示例在Boost::Spirit文档的最新版本中已完全消失。看看其他编译器示例。特别是魔术师示例,它是如何组织代码的极好示例。嗨,谢谢你的评论。我只关注计算器,因为它似乎更容易理解。在我看来,神秘的陈述也消失在魔术师的例子中:)
#include "calc6c.hpp"
// This is not really called. Its only purpose is to
// instantiate the constructor of the grammar.
void instantiate_statement()
{
typedef std::string::const_iterator iterator_type;
std::vector<int> code;
statement<iterator_type> g(code);
}
typedef std::string::const_iterator iterator_type;
typedef statement<iterator_type> statement;
vmachine mach; // Our virtual machine
std::vector<int> code; // Our VM code
statement calc(code); // Our grammar