0

因此,我成功地使用计算器示例将相对简单的语法的编译速度提高了约 50%(?)。计算器示例可以在这里找到。但是,示例中有一件事我并没有真正掌握,即calc6c.cpp

#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);
}

我发现评论真的很混乱,特别是因为当我在我的代码中尝试它(使用我的语法)时,是否包含这样的函数并不重要。无论有没有这个编译单元,我都可以成功编译。在我看来,语法是在 ll 上实例化的。74 在calc6.cpp

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

那么为什么需要函数 *instantiate_statement* 呢?或者更确切地说:在编译最终程序时,拥有一个包含 *instantiate_statement* 函数的编译单元与没有这样的编译单元有什么区别?

另外,我看得很远,但似乎没有涵盖此示例的页面-或者,就此而言,将语法拆分为多个编译单元的更通用示例-更详细和示例在 Boost::Spirit 文档的最新版本中完全消失了。

4

0 回答 0