- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一个需要解析实例名称和路径的语法,其中路径是由分隔符分隔的实例名称列表。分隔符可以是 .
(句点)或 /
(斜杠),在输入文件中列出路径之前给出,例如:
DIVIDER .
a.b.c
x.y.z
一旦设置,整个文件的分隔符就永远不会改变(即如果设置为 .
,遇到像 a/b/c
这样的路径应该不会正确解析)。由于我事先不知道分隔符是什么,所以我考虑将它存储在我语法的一个变量中,并在相应的 char_
解析器中使用该值(当然,实际语法很多更复杂,但这是我遇到麻烦的部分)。
这有点类似于这个问题:Boost spirit using local variables但不是我想要的,因为使用 Nabialek 技巧允许在设置分隔符后解析“无效”路径。
我不是在这里要求完整的解决方案,但我的问题本质上是这样的:我可以将值解析为我的语法成员,然后使用这些值进一步解析剩余的输入吗?
最佳答案
我会使用继承的属性:
qi::rule<It, std::string(char)> element = *~qi::char_(qi::_r1);
qi::rule<It, std::vector<std::string>(char)> path = element(qi::_r1) % qi::char_(qi::_r1);
// use it like:
std::vector<std::string> data;
bool ok = qi::parse(f, l, path('/'), data);
或者你/可以/确实绑定(bind)到一个局部变量:
char delim = '/';
qi::rule<It, std::string()> element = *~qi::char_(delim);
qi::rule<It, std::vector<std::string>()> path = element % qi::char_(delim);
// use it like:
std::vector<std::string> data;
bool ok = qi::parse(f, l, path, data);
如果你需要它是动态的,使用boost::phoenix::ref
:
char delim = '/';
qi::rule<It, std::string()> element = *~qi::char_(boost::phoenix::ref(delim));
qi::rule<It, std::vector<std::string>()> path = element % qi::char_(boost::phoenix::ref(delim));
// use it like:
std::vector<std::string> data;
bool ok = qi::parse(f, l, path, data);
关于c++ - 振奋 spirit : Parse char_ with changing local variable value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301467/
我需要通过 boost spirit 创建一条规则,以匹配以下情况 return foo; 和 return (foo); 我试过这样的: start %= "return" >> -boost::s
我想以这种形式解析一个函数(具有任意名称和任意数字的参数): function(bye, 1, 3, 4, foo) 参数可以是逗号分隔的通用字符串。我想复制函数的名称和字符串 vector 中的参数
我想将 C++ 函数声明与默认参数值匹配,但忽略这些值。例如: int myFunction(int a, int b = 5 + 4); 这是词法分析器的(一部分): struct Lexer :
我正在重构一个类型系统(类型模型),它使用 spirit 进行字符串序列化。我正在使用类型特征的编译时建模构造。 template<> type_traits { typedef boost:
我想实现一个需要解析实例名称和路径的语法,其中路径是由分隔符分隔的实例名称列表。分隔符可以是 .(句点)或 /(斜杠),在输入文件中列出路径之前给出,例如: DIVIDER . a.b.c x.y.z
我使用 boost spirit 来解析数学表达式并遇到了一个问题,我将其提取到以下代码中。 有一个带有一个标记的简单词法分析器,具有一个保存匹配字符串的属性。解析器定义了一个规则,该规则旨在获取 t
我设法将一个 pgn 文件解析为多个游戏 mainly thanks to this forum . 但是,由于我要处理的文件有很多游戏,在我最近使用的电脑上,这个过程可能需要两分钟。这就是为什么我想
我有一个表达式语法的最小示例(仅限算术表达式),只有当完整的输入是一个有效的算术表达式时,它才会成功。在我看来,即使子序列导致解析器的开始符号,解析器也会报告成功。 template s
我想解析一个 double vector 。然而,这个 vector 也可能包含两种类型的语句,它们对数据进行了一定程度的压缩:FOR和 RAMP . 如果FOR在字符串中,格式应该是" FOR "
我是一名优秀的程序员,十分优秀!