【问题标题】:Spirit X3 parser start state?Spirit X3解析器启动状态?
【发布时间】:2016-02-04 17:33:11
【问题描述】:

我一直在浏览我能够找到的 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 中有一些有意义的方法来处理这个问题?由于语法实际上非常简单,我认为使用单独的词法分析器是大材小用。

【问题讨论】:

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


    【解决方案1】:

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

    Live On Coliru

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

    【讨论】:

    • seek [ ] 和 omit [ ] 似乎是直接完成我所要求的相关工具。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2021-10-28
    相关资源
    最近更新 更多