提高精神气-有效引用语法

Boost Spirit Qi - Efficient Quote Grammar

本文关键字:引用 语法 有效 高精神      更新时间:2023-10-16

我正在尝试在我的boost spirit qi语法中实现一个规则,它的行为就像lisp语言中的QUOTE。

例如:QUOTE(a b c)

这个想法是在QUOTE的左圆括号和右圆括号之间的任何内容都将被捕获到字符串字面量中,而不是进一步解析。

由于'('或')'字符可能出现在QUOTE中,我不能使用:'"'>> *~char_('"')>> '"'而需要跟踪括号来确定引号结束符

示例:QUOTE(a (b) c) d)在这里,我想将内容"a (b) c) d"解析为字符串字面值。

我可以想到一些方法来做到这一点,一般的想法是保持一个局部变量来增加/减少括号的深度,等等。

由于语义动作的低效率,我希望有人能给出一个有效的方法来解决这个问题。

谢谢!

这里有qi::raw[]

它暴露了源迭代器的范围,因此您可以决定复制或构造,例如,从中复制boost::string_ref。没有比这更有效率的了。

例如:

qi::rule<It, std::string()> demo =
      qi::raw [
          qi::int_ >> '{' >> (qi::double_ % ',') >> '}'
      ];