Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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++ Boost Spirit:将语法拆分为多个编译单元_C++_Boost_Grammar_Boost Spirit - Fatal编程技术网

C++ Boost Spirit:将语法拆分为多个编译单元

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(代码); } 我发现这个注释真的很让人困惑,尤其是当我在代码中尝试它时(使用我的

因此,我成功地使用了计算器示例,将相对简单的语法的编译速度提高了约50%(?)。 可以找到计算器示例。然而,在这个例子中有一件事我并没有真正理解,那就是:

#包括“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