Boost.Spirit,Nabialek技巧和错误处理
Boost.Spirit, Nabialek trick and error handling
是否可以将"通用"错误处理(如教程中所述)与Nabialek技巧结合起来?像这样:
...
on_error<fail>
(
start
, std::cout
<< val("Error! Expecting ")
<< _4 // what failed?
<< val(" here: "")
<< construct<std::string>(_3, _2) // iterators to error-pos, end
<< val(""")
<< std::endl
);
start = *(keyword[_a = _1] > lazy(*_a));
some_other_rule.name("other rule's name");
...
现在,当some_other_rule
被延迟调用并失败时,错误消息说"lazy"
是逐字逐句的,而不是"other rule's name"
(我需要它)。它应该是这样工作的,而我只是在其他地方弄错了,还是还涉及其他一些特定的技巧?
好的,我已经解决了(在这里为遇到问题的人发布):
CCD_ 4和通过CCD_ 5解析器选择其指针的其他规则应当以CCD_。
这是因为lazy
本身就是一个解析器,当调用的解析器失败时,lazy
会回滚以尝试其他可能的分支。由于唯一的期望是它前面的一个(... > lazy()
),因此针对lazy
提出了期望失败。因此,我们所做的是添加另一个更接近实际误差的期望值。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- posix_spawn():使用posix_scawn()时的错误处理问题
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 关于 istream 中的错误处理的问题
- 程序使用的 C 库中的错误处理C++
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 使用std::tie进行类似golang的错误处理,同时返回结果,是否有缺点?(C++11)
- Boost进程"系统"功能中的错误处理
- RPN计算器c++错误处理和多个运算符
- 提升精神 x3 错误处理程序与期望
- 构造函数中的错误处理而不会失败
- 当 C++ 中函数参数的输入类型(类)错误时的错误处理
- 关于 ocilib 错误处理的问题,如何使用 ocilib 正确捕获日志错误?
- 我可以使用 std::optional 进行错误处理吗?
- C++ main() 末尾关于错误处理的错误
- 抽象包装带有异常的 C 错误处理的最佳方法
- vwprintf错误处理(ERRNO显示0)
- C++ 使用枚举进行错误处理
- 在 C++ 中创建自己的错误处理机制