Spirit X3解析器启动状态?

时间:2016-02-04 17:33:11

标签: c++ parsing boost boost-spirit-lex boost-spirit-x3

我一直在浏览我能够找到的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提供lexer启动状态,这将是处理这项工作的传统方式。顺便说一句,由于X3是基于C ++ 14而Spirit.Lex构建在lexertl之上,是否有配置选项或方法将Spirit.Lex与现代化的lexertl14一起使用?
  3. 也许在X3中有一些有意义的方法来处理这个问题?由于语法实际上非常简单,我认为有一个单独的词法分析器是过度的。

1 个答案:

答案 0 :(得分:1)

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

<强> Live On Coliru

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