提升::精神(气)在浮点和双倍之间做出决定
boost::spirit (qi) decision between float and double
>我有一个解析器,它可以解析输入文件中的不同数据类型。我已经想通了,这种精神可以在短和整之间做出决定,例如:
value %= (shortIntNode | longIntNode);
跟
shortIntNode %= (qi::short_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateShortIntNode, qi::_1)];
longIntNode %= (qi::int_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateLongIntNode, qi::_1)];
我也使用这种类型的规则来检测双精度(来自这里和这里的答案)。解析器能够在 int 表示数字> 65535 和 short 表示数字 <= 65535 之间做出决定。但是,对于float_和double_,它没有按预期工作。它只是将这些值舍入以将其解析为浮点值,如果有这样的规则:
value %= (floatNode | doubleFloatNode);
跟
floatNode %= (qi::float_)
[qi::_val = phoenix::bind(&CreateFloatNode, qi::_1)];
doubleFloatNode %= (qi::double_)
[qi::_val = phoenix::bind(&CreateDoubleFloatNode, qi::_1)];
您是否知道是否有选项或其他技巧可以根据数据类型范围在float_和double_之间做出决定?
谢谢!
Lexing 可以提供帮助。最终由您决定,而不是解析器。订购您的分支机构应该会有所帮助。参见
-
使用提升精神解析 int 或双精度 (longest_d)
-
与 qi::重复和可选解析器不匹配
对于具有Boost Spirit的类似解析器。
如果要在浮点数/双精度数之间做出决定,则没有实际的输入标准。我建议总是解析为双精度。但是,您当然可以使用语义操作来强制浮点数达到特定大小。
以下是C++语法的作用(例如):
floatrule = lexeme [ float_ >> 'f' ];
doublerule = double_;
float_or_double = floatrule | doublerule;
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 在信号槽机制与传统环路之间做出决定
- 编译器如何在向量vs Initializer_list之间做出决定
- C - 编译器如何以参数为参数的过载函数在超载函数之间决定
- 在random_device和seed_seq之间做出决定,为多个随机数序列生成种子
- 是整数舍入规则决定了 C++、python3 和 python2.7 之间的 % 操作差异吗?
- 提升::精神(气)在浮点和双倍之间做出决定
- C++11 类型推理如何在浮点数或双精度数之间做出决定
- 尝试在Qt中连接隐藏信号的两种方式之间做出决定
- 在返回值和"回调"之间做出决定时的样式与一致性
- 库设计:允许用户在"header-only"和动态链接之间做出决定?