【问题标题】:Parsing single spaces using boost::spirit parser使用 boost::spirit 解析器解析单个空格
【发布时间】:2021-05-28 12:02:23
【问题描述】:

我希望能够使用 parser 解析术语之间的单个空格(即使存在多个单个空格)。我尝试像这样将qi::space 解析器添加到character 规则中 _character = alnum | char_("\"'| !#$%&()*+,./:;>=<?@]\\^_`{}~[-") | qi::space; 但这甚至没有编译。即使存在多个空格,我如何强制执行单个空格解析。

【问题讨论】:

  • 你能说明什么是“出错”吗?因为没有理由“它”不应该编译,也不应该做你所期望的。

标签: boost-spirit boost-spirit-qi


【解决方案1】:

我的看法,

  1. _character 已经是词位,因此船长问题已解决 (Boost spirit skipper issues)
  2. char_("abc") | char_("d") 等价于 char_("abcd")`
  3. 表达式char_("\"'| !#$%&()*+,./:;>=<?@]\\^_{}~[-")ALREADY contains the space, so tacking on| qi::char_(' ')` 不会改变任何事情
  4. 您似乎期望space 实际上匹配' ' (ASCII 32)。这几乎是真的,但它与您的语言环境分类为isspace 的任何内容相匹配。这包括(水平)标签、换页、换行符以及可能的其他内容。

我认为你需要重新考虑你的问题,可能你对其他事情感到困惑

  • 查看that linked post 以检查您对船长的理解(在规则_rule_expression_list 上有效)。

  • 也许您看到“多重匹配”,因为制表符显示为多个空格,并且会被匹配

  • 也许你对 changin _character 的作用有一个错误的理解:它实际上是专门用于 inside 引用的文字。您不太可能需要在文字中进行特殊情况空间解析。

【讨论】:

  • 也许这可以澄清我的问题;我希望能够阅读文字、术语或文字和术语之间的空格。例如:<num> ::= <a> a | b b。我希望能够读取两者之间的空白。
  • 那么,你为什么要使用_character 规则呢?这使得......因为我在答案中解释的原因没有意义。你能发布一个新问题,在哪里发布你拥有的代码,你想要解析的输入和你想要实现的输出?
  • (哦,也许还要说明目标,为什么您要尝试将重要性读取到 BNF 空白中。所以我们不会卡在X/Y problem 的下一站)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 2011-03-05
  • 2012-01-17
  • 2015-01-25
  • 1970-01-01
相关资源
最近更新 更多