C++ 如何使用Boost::Spirit::Qi跟踪多个输入的输入位置?

C++ 如何使用Boost::Spirit::Qi跟踪多个输入的输入位置?,c++,boost-spirit-qi,C++,Boost Spirit Qi,我想在boost spirit解析器中支持类似C++的#include机制。本质上,我有一个脚本命令,要求解析器从文件中加载子脚本。我希望能够报告文章中描述的错误消息,但它们不包括对多个输入的解析 使用boost::spirit::qi可以合理地实现这一点吗 我一直致力于使用更智能的迭代器类型来获得不同的输入。不过,我还是希望看到精确的定位。我想,使用智能迭代器是一种可行的方法。需要做的是让迭代器维护一组输入上下文。每个输入上下文存储与特定文件相关的信息 每当需要读取新文件时(即在看到#incl

我想在boost spirit解析器中支持类似C++的
#include
机制。本质上,我有一个脚本命令,要求解析器从文件中加载子脚本。我希望能够报告文章中描述的错误消息,但它们不包括对多个输入的解析

使用
boost::spirit::qi
可以合理地实现这一点吗


我一直致力于使用更智能的迭代器类型来获得不同的输入。不过,我还是希望看到精确的定位。

我想,使用智能迭代器是一种可行的方法。需要做的是让迭代器维护一组输入上下文。每个输入上下文存储与特定文件相关的信息

每当需要读取新文件时(即在看到
#include
语句后),都会创建一个新的输入上下文。当前输入上下文被推送到堆栈上,而新上下文则成为活动上下文。EOF时,从堆栈中弹出下一个输入上下文,返回到
#include
后面的点。如果堆栈为空,则达到主文件的EOF


在任何情况下,迭代器都只能从活动输入上下文中获取输入。

您能否详细介绍一下您要寻找的行为类型?例如,您可以通过递归应用语法来跟踪多个文件中的输入位置,但我猜这不是您要查找的内容。@Academical:我希望在发生错误时能够获得类似当前行的内容。收集那么多;),显然我只是把问题看得太多了。这就是我目前正在做的。但是如果你这样做,spirit不知道,因此无法跟踪当前位置。我想你可以将当前文件名和位置存储在相应的输入上下文中,让Qi可以使用。如果可能的话,我想使用spirit自己的位置跟踪工具。