Spirit X3解析器启动状态?

Spirit X3 parser start state?

我一直在浏览我能够找到的 Boost.Spirit X3 文档——并不多——我想我想将它用于我的下一个解析项目.值得注意的是,我从未使用过 Boost.Spirit Classic 或 V2,但使用过 flex/bison 和 ANTLR。

我要解析的格式,在最基本的意义上,如下所示:

unimportant
foo
bar
# BEGIN
parse this
...
# END
ignore this

其中仅解析“#BEGIN”和“#END”之间的文本,其他所有内容都被完全忽略。我试图找出一种在 X3 解析器中完成此操作的有效方法。我的一些想法:

  1. 使用基本的字符串搜索功能来限制解析范围。这似乎是最糟糕的选择,因为文本将被处理多次而不是一次性处理。
  2. 调查Spirit.Lex。我再次发现在 Spirit.Lex 上找到任何体面的阅读 material 有点困难,但 Lex 似乎提供了词法分析器开始状态,这将是处理这项工作的传统方式。顺便说一句,由于 X3 是基于 C++14 的,并且 Spirit.Lex 构建在 lexertl 之上,是否有配置选项或方式将 Spirit.Lex 与现代化的 lexertl14 一起使用?
  3. 也许在 X3 中有一些有意义的方法来处理这个问题?由于语法实际上非常简单,我认为有一个单独的词法分析器是大材小用。

Using Boost Spirit to parse a text file while skipping large parts of it中的示例也适用于 X3:

Live On Coliru

当然要根据自己的喜好修改。如果您在 [SO] 上搜索 qi seek,您会找到更多示例,其中一些可能更接近您的目的。