如何使用 boost::spirit::qi 解析行尾?

2024-04-25

不应该是一个简单的eol http://www.boost.org/doc/libs/1_42_0/libs/spirit/doc/html/spirit/qi/quick_reference/qi_parsers/auxiliary.html做这件事吗?

#include <algorithm>
#include <boost/spirit/include/qi.hpp>
#include <iostream>
#include <string>
using boost::spirit::ascii::space;
using boost::spirit::lit;
using boost::spirit::qi::eol;
using boost::spirit::qi::phrase_parse;

struct fix : std::unary_function<char, void> {
  fix(std::string &result) : result(result) {}
  void operator() (char c) {
    if      (c == '\n') result += "\\n";
    else if (c == '\r') result += "\\r";
    else                result += c;
  }
  std::string &result;
};

template <typename Parser>
void parse(const std::string &s, const Parser &p) {
  std::string::const_iterator it = s.begin(), end = s.end();
  bool r = phrase_parse(it, end, p, space);
  std::string label;
  fix f(label);
  std::for_each(s.begin(), s.end(), f);
  std::cout << '"' << label << "\":\n" << "  - ";
  if (r && it == end) std::cout << "success!\n";
  else std::cout << "parse failed; r=" << r << '\n';
}

int main() {
  parse("foo",     lit("foo"));
  parse("foo\n",   lit("foo") >> eol);
  parse("foo\r\n", lit("foo") >> eol);
}

Output:


"foo":
  - success!
"foo\n":
  - parse failed; r=0
"foo\r\n":
  - parse failed; r=0  

为什么后两者会失败呢?


相关问题:

使用 boost::spirit,如何要求记录的一部分独占一行? https://stackoverflow.com/questions/2428371/using-boostspirit-how-do-i-require-part-of-a-record-to-be-on-its-own-line


您正在使用space作为调用phrase_parse 的船长。该解析器匹配任何字符std::isspace返回 true(假设您正在进行基于 ASCII 的解析)。为此\r\n输入中的内容在被你的船长看到之前就被你的船长吃掉了eol parser.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 boost::spirit::qi 解析行尾? 的相关文章

  • 谁能建议我一种在 C++ 中分割名称的简单方法

    我一直在尝试将名称分为名字和姓氏 但我确信我的实现就简单性而言并不是最好的 string name John Smith string first string last name name find getting lastname fo
  • 数据模板绑定垃圾邮件输出窗口出现错误:找不到管理 FrameworkElemen

    我有问题 System Windows Data 错误 2 找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement BindingExpression 无路径 数据项 空 目标元素是 So
  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作

随机推荐

  • Xamarin.UITest:如何检索列表中的所有元素

    我有一个包含 500 个元素的列表 当我使用app Query在页面上 Xamarin UITest 只给了我 6 个元素 因为 UI 中只有 6 个元素可见 如何从 UITest 内的列表中检索所有 500 个元素 如上所述 预期行为ap
  • CMake 错误“找不到要添加属性的目标”

    在我的 CMakeLIsts txt 文件中我这样写 set LIBHELLO SRC hello c set target properties hello static PROPERTIES OUTPUT NAME hello get
  • 在JTextArea中使用Timer实现打字机效果?

    我正在制作一款文本冒险游戏 但遇到了一个问题 我无法按照我想要的方式显示一些文本 当输入一些单词时 玩家可以开始引入一个新房间 我希望这个介绍具有 打字机 效果 该事件需要在我的程序 ActionPerformed 方法中发生 例如 当用户
  • 如何在 Tridion 中获取当前登录用户的 tcmid?

    private void Subscribe EventSystem Subscribe
  • 对象不支持属性或方法日期选择器

    我试图在我的页面中放置一个日期选择器并收到此错误 我已经搜索并寻找此错误的其他答案 但找不到任何答案 如果没有对于引导程序部分 它有效 但有了它 我收到了这个错误 这背后的原因是什么 我该如何解决这个问题 这是我的index cshtml
  • 如何用mock修补模块的内部函数?

    我所说的 内部函数 是指从定义它的同一模块内调用的函数 我正在使用mock http www voidspace org uk python mock 图书馆 特别是patch http www voidspace org uk pytho
  • Android中状态栏的高度[重复]

    这个问题在这里已经有答案了 Android状态栏的高度是多少 总是一样吗 从我的测量来看 它似乎是 25dp 但我不确定它在所有平台上是否具有相同的高度 我想知道这一点以正确实现从没有状态栏的活动到有状态栏的活动的淡入淡出过渡 这个问题之前
  • windows下如何获取线程的起始地址?

    I m working on a mini windows process explorer in C I have a handle to a thread How can I retrieve starting address of t
  • 如何使用自定义复选框按钮选择表视图行选择?

    如何使用自定义按钮选择表格视图行 我有另一个按钮 称为选择表视图外部的所有内容 我的问题是 在单击表视图按钮外部时 如何选择和取消选择表视图内部的行 同时我可以在表视图中选择单行吗 如何在 swift 3 中做到这一点 这是我在 cellf
  • Spring MVC 中 Bean 集合的自定义绑定错误消息

    我们使用的是 Spring MVC 3 0 6 但我们没有使用 JSR 303 验证 仅在处理模型表单 bean 的控制器方法中使用 BindingResult 进行绑定错误 我将尝试简化下面的示例 因为问题不在于如何构建事物 因为这些决定
  • git-svn rebase 出了严重错误

    有没有办法重做 git svn rebase 或重置任何效果 在我的 8000 提交 git svn 存储库中 合并分支后出现问题 我的本地 master 没有反映任何接近完整主干日志的内容 和跑步git svn rebase正确地获取新的
  • Material UI 嵌套主题提供程序打破了 withStyles HOC

    我有一个使用 Create React App 创建的 React 应用程序 并使用 material ui core npm 包进行主题化 为了自定义组件 我使用 MaterialUI 提供的 withStyles 高阶组件 根据文档它支
  • read_excel 读入消息 - 抑制?

    我喜欢使用readxl包裹 然而 我一直将它用作 RMarkdown 文档的一部分以及一些read excel 读取文件时的消息在进行分析时很有用 但在尝试呈现分析时则无用 所以问题是 在使用时是否有任何方法可以抑制收到的消息 或与此相关的
  • 在 while 循环内使用 try-finally 块[重复]

    这个问题在这里已经有答案了 当我在 while 循环中使用finally 时 我试图理解该机制 在下面的代码中 终于在行打印并比 while 中断 我预计代码不会到达finally 块 或者如果它到达finally块 则有no break在
  • Grunt watch 任务似乎需要很长时间

    我正在运行两个简单的任务 每个任务运行时间 spawn to false但这似乎破坏了它 并且没有运行任何相关的任务 以下是更改 sass 文件时的示例输出 gt gt File app styles main scss changed F
  • ggplot2堆叠条形图数据标签向后

    我想在 ggplot2 中创建一个堆积条形图 其中数据标签位于与其相关的填充区域的中心 我尝试过的代码的标签顺序与应有的顺序相反 这是代码示例 data rep lt data frame Task Number c 5 004 5 004
  • Eclipse C++ 打印漂亮吗?

    从 Eclipse 打印 C 源代码时得到的输出相当难看 是否有方法 插件可以漂亮地打印 C 源代码 例如与a2ps 这可能是对C源代码使用另一个过滤器 我也用enscript为了这 这是我经常使用的别名 alias cpp2ps ensc
  • 诊断 R 包构建错误:pdfLatex 不可用

    我正在尝试构建一个包R 我制作了骨架 并运行了命令R CMD check package1 我收到一个错误描述here https stackoverflow com questions 10819959 diagnosing r pack
  • 迁移到 Jboss 7.0 AS 后 Firefox 和 IE 中的 ViewExpiredException

    我们的 JSF 2 0 Richfaces 4 0 应用程序在 Jboss 6 0 上运行得非常好 我们正在尝试将其迁移到 Jboss 7 0 AS 对于我们点击页面上的任何链接 我们在 Firefox 和 IE 中遇到 ViewExpir
  • 如何使用 boost::spirit::qi 解析行尾?

    不应该是一个简单的eol http www boost org doc libs 1 42 0 libs spirit doc html spirit qi quick reference qi parsers auxiliary html