我尝试构建一个非常简单的计算器,支持x,y,+, - ,*,/(,)。这个想法很简单:
使用boost 1.46,您可以使用parse_phrase()轻松地同时执行这两个步骤。但是,我必须执行步骤2一百万次,而解析不会改变。所以我想把它分开(就像在经典精神版本中一样)。我怎样才能做到这一点? (请注意:boost 1.46还没有完整的数据结构)
答案 0 :(得分:2)
我同时得到了一个解决方案。这很简单,请看the boost docs linked here。
main()函数包含以下代码:
expression_ast ast;
ast_print printer;
bool r = phrase_parse(iter, end, calc, space, ast);
if (r && iter == end)
{
// [...]
printer(ast);
// [...]
}
boost中实际上有多个phrase_parse()函数。有一些不同的词组_parse和带有附加参数的词组“变体[s]:解析器的属性。”,如in the boost docs所述。在上面的代码中,ast
是解析器的属性; printer
然后评估ast。
如果我们想要从外部评估打印机的不同值,我们会在每次调用printer(ast)
之前将它们传递给打印机。
1.46的注意事项:还没有boost::utree
。但是,此示例中的AST是完全功能的替代。