进入振奋精神; Qi还是X3?

2023-12-01

我正在和一个朋友一起为一个小型个人项目做一名口译员;我们开始实现所有类和通用结构,其中代码将被翻译然后执行,只是为了推迟将实际解析代码放入这些结构中。

现在我们必须构建解析器,经过一番搜索,我发现到处都有帖子和人们谈论spirit Qi和spirit X3,就好像它们是(我认为它们是)两种不同的制作解析器的方法,但没有人说一下区别,哪个是最近的,我应该从哪一个开始。

目的是,给定一个代码字符串,输出最终的错误,如果一切都尊重语法和逻辑,则将代码转换为我们已经构建的类的树。我们希望在解析过程中检查一致性,例如“您正在使用未声明的变量”类型的错误。

我不确定这两个库如何以不同的方式对待事物。


X3 较新,仍处于实验阶段,需要 C++14。

Qi is

  • 更稳定
  • 更轻松地支持更多状态选项
  • 支持惰性解析器(您可能会喜欢)
  • 编译速度慢得多

文档是

  • https://www.boost.org/doc/libs/1_68_0/libs/spirit/doc/html/spirit/qi.html
  • https://www.boost.org/doc/libs/1_68_0/libs/spirit/doc/x3/html/index.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进入振奋精神; Qi还是X3? 的相关文章

  • 提升灵气因记忆违规而崩溃

    但我不明白为什么 http coliru stacked crooked com a 2912593bb421a35e http coliru stacked crooked com a 2912593bb421a35e include
  • Boost.Spirit:解析期间设置子语法

    为了处理大量的编译时间和语法的重用 我将语法组成了几个按顺序调用的子语法 其中之一 称为 SETUP 语法 提供了解析器的一些配置 通过符号解析器 因此后面的子语法在逻辑上依赖于该语法 再次通过不同的符号解析器 因此 在解析SETUP之后
  • 了解 Boost.Spirit 中的列表运算符 (%)

    你能帮我理解两者之间的区别吗a b解析器及其扩展a gt gt b gt gt a Boost Spirit 中的形式 虽然参考手册 http www boost org doc libs 1 59 0 libs spirit doc ht
  • 是否可以在另一个语法定义中重复使用 boost::spirit::qi 语法?

    是否可以重复使用boost spirit qi另一种语法中的语法 例如作为规则 例如 如果我定义一个语法来将文本行解析为保存街道地址的结构 template lt typename iter gt struct address gramma
  • 用 Spirit Qi 解析成 std​​::vector,出现段错误或断言失败

    我使用 Spirit Qi 作为解析器 将数学表达式解析为表达式树 我跟踪诸如解析时遇到的符号类型之类的事情 并且必须在我正在解析的文本中声明这些符号 也就是说 我正在解析贝尔蒂尼输入文件 http bertini nd edu Berti
  • 寻找 C++ 中搜索和替换的圣杯

    最近 我正在寻找一种替换字符串中标记的方法 这本质上是查找和替换 但至少还有一种解决问题的方法 看起来像是相当平庸的任务 我已经提出了几种可能的实现 但从性能的角度来看 它们都不能令人满意 最好的成绩是每次迭代约 50us 这种情况很理想
  • 如何访问 boost::spirit::karma 中嵌套对象的数据?

    In an ItemList包含列表Item对象 我如何访问Item生成器中的对象 以下示例代码在 VC9 上编译 适当设置了 boost 包含和链接目录 我不知道如何设置list generator item include
  • 使用 boost Spirit 解析带有二进制信封的文本文件

    我目前正在尝试为 ASCII 文本文件编写一个解析器 该文件被一个带有校验和的小信封包围 该文件的基本结构是 我想将有效负载提取到另一个字符串中以将其提供给 下一个解析器 我用来解析这个信封的解析器表达式是 qi phrase parse
  • Boost Spirit x3 - 惰性解析器

    有最新的吗boost spirit x3实施lazy解析器 我发现它在文档 https www boost org doc libs develop libs spirit doc x3 html spirit x3 quick refer
  • 在 boost::spirit 语法中翻转规则内的子规则顺序会导致段错误

    警告 虽然我试图将代码缩短到最少 我仍然需要包含相当多的内容 以确保提供所需的信息 该代码编译文件并运行 导致语法错误 name simple name qi val qi 1 qualified name qi val qi 1 虽然这
  • X3:非终端解析器上的链接器错误(未解析的外部符号“parse_rule”)

    首先我使用的是MSVC 2017 最新版本 这是我的非终结符解析器的代码 播放器 hpp namespace parse namespace impl namespace x3 boost spirit x3 struct tag usin
  • 虚拟类作为 Spirit 的 AST 节点

    我当时正在和一个朋友一起开发一种语言的解释器 我们从一个我猜想不太明智的决定开始 我们首先制作所有用于执行的元素 实际上是由不同类组成的树 但现在看着 boost 的例子 我对如何合并两者感到很困惑 我知道从什么开始 语法 我知道要达到什么
  • Boost Spirit X3 量产准备好了吗?

    我正在将手写解析器迁移到 Boost Spirit 2 5 4 第一印象是积极的 但由于我使用的是 C 17 X3 似乎是一个非常有吸引力的选择 幸运的是 有很多关于 X3 的资源 many Stackoverflow 上有关 X3 的问题
  • boost::spirit::qi::语法和可变参数模板

    我在使用可变参数模板定义语法时面临一个问题 我首先定义一些包含在某些结构中的简单语法 例如纬度 经度 如下所示 include
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • 语法问题

    我需要解析一个表达式 并且我正在使用 boost spirit 表达式必须具有以下形式 字符串 PV 后面除了 之外的任何内容 我正在使用以下语法 P S gt gt gt gt V S ch p gt gt ch p V str p PV
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 使用 boost::spirit::qi 解析键入的 csv 文件

    我想解析带有键入值的 CSV 文件 每列的类型在标题中定义 例如 int double double int unsigned 12 1 3 23445 1 42 45 46 47 48 49 结果数据结构可能类似于这个二维向量 using
  • 使用 Boost::Spirit 解析 time_period 表达式

    我需要使用 Boost Spirit 解析以下 EBNF 表达式 period date part time part date part time part time part hours minutes seconds date par

随机推荐

  • 无法在 python 应用程序的 app.yaml 中设置缓存过期

    在我的 GAE 应用程序中 我提供如下静态内容 这些是我的 app yaml 文件中的条目 handlers url css static dir static css expiration 10m url js static dir st
  • Django:表不存在

    我删除了一些与应用程序相关的表 并再次尝试了syncdb命令 python manage py syncdb 它显示错误 例如 django db utils ProgrammingError 1146 Table someapp feed
  • 计算机如何分配两个变量以及如何计算两个变量之间的距离?

    当我尝试检查两个变量之间的差异时 我发现了一些有趣的东西 您可以在下面的代码中看到 include
  • 如何在Android中使用DialogFragment进行文本输入?

    我正在尝试使用推荐的方法获取用户输入到对话框中的值DialogFragment类 对话框构造并运行良好 但我无法返回EditText参数传递给父类 无需获取NullPointerException My DialogHost类 它构造 返回
  • 自动过滤多个不相等的值

    我正在为 Excel 表添加自动过滤器 如下所示 With Sheets Sheet1 With ListObjects Summary Range AutoFilter Field 1 Criteria1 gt 400000 Operat
  • 在 ASP.NET 中执行命令行实用程序

    我需要一些有关从 C ASP NET Web 应用程序使用命令行实用程序的建议 我找到了一个用于将文件转换为 CSV 格式的第 3 方实用程序 该实用程序运行良好 可以从命令行使用 我一直在网上寻找有关如何执行命令行实用程序的示例 并发现t
  • 在spring roo中添加自定义页面

    我有一个关于 spring roo 的问题 如何将自定义页面添加到您的 Web 应用程序 如果我使用标准 Servlet 这似乎非常基本且简单 但我完全困惑在 Spring roo 中执行此操作 我想要的只是主页 带有菜单等 中有一个链接到
  • 简单的互操作测试;通过简单的调用使堆栈不平衡

    我目前正在研究与互操作相关的问题 并编写了一个小型测试程序 以帮助我弄清楚发生了什么 有问题的问题涉及对更复杂的本机函数的调用 很难在此处发布 无论如何 我有一个非常简单的本机 dll 其中仅包含以下代码 extern C declspec
  • 无法通过 Ubuntu 终端在 Github 上推送

    我正在尝试从我的 Ubuntu 机器推送到 github 我可以从 Visual Studio Code 终端推送 但无法从 Ubuntu 终端或 Android Studio 终端推送 每次我尝试从终端或 android studio 终
  • 如何终止 jboss 超时的数据库事务

    我用的是jboss 4 2 3 它具有设置 TransactionTimeout 在jboss service xml中 指定允许事务执行多长时间 不幸的是 当超时过去时 执行不会立即中止 如果事务正在执行某些操作 则只会将其标记为稍后回滚
  • 插值内的 Angular MatToolTip 条件

    我正在为 MatToolTip 添加角度条件 首先 以下内容仅适用于 1 个字符串分配 matToolTip myData name 但我需要添加如下条件 matToolTip myData hasName myData name myDa
  • java https网络问题

    我正在尝试实现最简单的 HTTPS 通信程序 网上有很多例子 但我没能成功运行 这是一个例子 public class ReadHttpsURL1 static final int HTTPS PORT 443 public static
  • 为什么在 python map() 和 multiprocessing.Pool.map() 中得到不同的答案?

    我有一个奇怪的问题 我有一个格式的文件 START 1 2 STOP lllllllll START 3 5 6 STOP 我想读一下之间的内容START and STOP作为块 并使用my f处理每个块 def block generat
  • 通过 JavaScript 检索所有已安装打印机的列表

    我收到了一个网页的屏幕截图 其中显示了组合框中客户端可访问的所有已安装打印机 本地和网络打印机 的列表 并让用户选择一台 甚至还有一个刷新列表的按钮 我无权访问该页面 无法证明其功能 是否有可能在网页中以任何方式执行此操作或模拟此工作 如果
  • Office365 REST API - 创建带有附件的日历事件

    我无法使用 Office365 的 Rest API 创建带有附件的日历事件 创建没有附件的事件不是问题 尝试创建带有附件的事件会创建事件 但不会添加我发送的文件 服务器以 201 响应代码进行响应 我正在向以下地址发送 POST 请求 h
  • 按上次修改日期时间过滤 Onedrive 项目

    我尝试通过 lastModifiedDatetime 属性从 Microsoft Graph 端点中筛选 OneDrive 项目 像这样的东西 https graph microsoft com beta me drive special
  • 如何使用 Groovy 的正则表达式获取部分匹配的布尔值?

    Groovy 有一个正则表达式 匹配运算符 The 文档说它返回一个布尔值 但需要 严格匹配 它没有定义 严格匹配 我不熟悉该表达式所在的任何正则表达式系统false 但是 这就是 Groovy 告诉我的 foo bar baz bar g
  • 为什么不捕获一般异常

    我的VS刚刚告诉我 警告 2 CA1031 Microsoft Design 修改 Program Main string 以捕获比 Exception 更具体的异常或重新引发异常 我为什么要那么做 如果我这样做 并且没有捕获所有异常来处理
  • 如何实时回显输出(在脚本完成之前)?

    在脚本执行完毕之前如何输出到浏览器 例如 下面的代码将一次输出所有 100 个 hi 我该如何制作 以便在读取 处理该代码部分后立即输出 例如 PHPBB3论坛显示了逐步安装过程 在循环之前调用 ob implicit flush 请注意
  • 进入振奋精神; Qi还是X3?

    我正在和一个朋友一起为一个小型个人项目做一名口译员 我们开始实现所有类和通用结构 其中代码将被翻译然后执行 只是为了推迟将实际解析代码放入这些结构中 现在我们必须构建解析器 经过一番搜索 我发现到处都有帖子和人们谈论spirit Qi和sp