我正在尝试在我的 boost spirit qi 语法中实现一个规则,该规则在类 Lisp 语言中的行为类似于 QUOTE。
类似于:QUOTE(a b c)
想法是 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_ % ',') >> '}'
];
关于c++ - boost spirit 气 - 高效报价语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707486/