2

我一直在浏览我能够找到的 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 上找到任何体面的阅读材料有些困难,但似乎 Lex 提供了词法分析器启动状态,这将是处理这项工作的传统方式。顺便说一句,由于 X3 基于 C++14 并且 Spirit.Lex 构建在lexertl 之上,是否有配置选项或方法可以将 Spirit.Lex 与现代化的 lexertl14 一起使用?
  3. 也许在 X3 中有一些有意义的方法来处理这个问题?由于语法实际上非常简单,我认为拥有一个单独的词法分析器是矫枉过正的。
4

1 回答 1

1

Using Boost Spirit to parse a text file while skipping the large part of it的示例同样适用于X3:

Live On Coliru

当然,您必须根据自己的喜好对其进行修改。如果您qi seek在 [SO] 上搜索,您会发现更多示例,其中一些可能更接近您的目的。

于 2016-02-04T19:50:17.090 回答