gpt4 book ai didi

c++ - Boost Spirit 罗马数字解析器示例

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:44 25 4
gpt4 key购买 nike

尝试学习 boost spirit 和文档中给出的示例让我有点困惑。

引用这段代码:

http://www.boost.org/doc/libs/1_46_1/libs/spirit/example/qi/roman.cpp

特别是这段语法:

        start = eps             [_val = 0] >>
(
+lit('M') [_val += 1000]
|| hundreds [_val += _1]
|| tens [_val += _1]
|| ones [_val += _1]
)

有人可以向我解释为什么它是 +lit('M') 而不是 *lit('M')。因为毕竟不能有零个或多个 M 与一个或多个 M 吗?

最佳答案

一个|| b 运算符在 Spirit 中表示 ab,但是 ba 之后,如果 a 发生。在运算符的含义中,没有 M 的情况是隐含的(因为 M 的匹配可能存在也可能不存在)。另外,在 *lit('M') 的情况下,如果没有 NO M,您会说匹配第一条规则吗?无论如何它都是有效的,_val 将增加 1000。

关于c++ - Boost Spirit 罗马数字解析器示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7179502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com