小编Zey*_*neb的帖子

Spirit X3,这种错误处理方法有用吗?

在阅读了 Spirit X3 关于错误处理的教程和一些实验之后。我得出了一个结论。

\n\n

我相信 X3 中的错误处理主题还有一些改进的空间。从我的角度来看,一个重要的目标是提供有意义的错误消息。首先也是最重要的是添加一个将_pass(ctx)成员设置为 false 的语义操作,\xe2\x80\x99 不会这样做,因为 X3 会尝试匹配其他内容。仅抛出 anx3::expectation_failure会提前退出解析函数,即不尝试匹配其他任何内容。所以剩下的就是解析器指令expect[a]和解析器operator>以及手动抛出x3::expectation_failure从语义操作中手动抛出。我确实相信有关此错误处理的词汇量太有限。请考虑以下 X3 PEG 语法行:

\n\n
const auto a = a1 >> a2 >> a3;\nconst auto b = b1 >> b2 >> b3;\nconst auto c = c1 >> c2 >> c3;\n\nconst auto main_rule__def =\n(\n a |\n b |\n c );\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在对于表达式a我不能使用expect[]or operator>,因为其他替代方案可能是有效的。我可能是错的,但我认为 X3 要求我拼写出可以匹配的备用错误表达式,如果它们匹配,它们可以抛出x3::expectation_failure这很麻烦。

\n\n

问题是,是否有一种好方法可以使用当前的 X3 设施通过 …

c++ boost-spirit boost-spirit-x3

2
推荐指数
1
解决办法
858
查看次数

标签 统计

boost-spirit ×1

boost-spirit-x3 ×1

c++ ×1