问题标签 [qi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
696 浏览

xml - 使用 XML 的 EBNF 实现 XML 转换器

我正在考虑使用基于 W3C 的XML 1.1规范的编译器生成器来实现 XML 转换器的想法,该规范包括完整的 EBNF 语法。

更准确地说,我打算使用Qi-YACC,因为我想学习这个工具。这将是我第一次尝试使用任何编译器-编译器。

我计划实现的第一种翻译非常简单: XML 到S-EXPRs。之后,我打算概括我的翻译,但这不是我问题的重点。

您预计此类项目有什么重大缺陷吗?我读过使用它的 EBNF 翻译 XML 是一个坏主意。我想知道为什么。而且 Qi 语言并不是已经有了 XML 解析器,所以我绝对不想在这里重新发明轮子。

0 投票
1 回答
93 浏览

ccl - 齐本型的烦恼

我徒劳地试图让类型声明示例与 Clozure CL 一起使用,例如:

但我得到的唯一输出是:

好像是Ccl的问题,有没有可能正常运行?

PS:类型检查开启,(tc +)

0 投票
1 回答
364 浏览

c++ - 船长在 boost::spirit 中不起作用

我使用增强精神来解析颜色。效果很好,但是在我更改了迭代器类型之后,船长停止了工作。

这是标题:

这是cpp

和电话:

我敢肯定,这只是一个小错误,但我看不到它。也许我在源头上看了太久……你能看出一个错误吗?

0 投票
1 回答
501 浏览

c++ - 如何使用 Boost Spirit 提取修剪后的文本?

使用 boost 精神,我想提取一个字符串,后面跟着括号中的一些数据。相关字符串由左括号中的空格分隔。不幸的是,字符串本身可能包含空格。我正在寻找一个简洁的解决方案,它返回没有尾随空格的字符串。

下面的代码说明了这个问题:

它的输出是:

使用这个简单的语法,提取的字符串后面总是跟一个空格(我想去掉)。

该解决方案应该在 Spirit 中起作用,因为这只是更大语法的一部分。(因此,在解析后修剪提取的字符串可能会很笨拙。)

先感谢您。

0 投票
1 回答
549 浏览

c++ - 无法使用 boost::spirit::qi 解析 SQL 类型 where 条件

我可能会问一个非常微不足道的问题,但我并没有从我的大脑中获取块来破解它。尝试使用 boost::spirit::qi 解析如下所示的 SQL like where 子句以生成对向量

我已经完成了以下线程,但仍然无法做到:-( Thread5 Thread4 Thread3 Thread2 Thread1

我真诚地请求,请帮助我了解如何实现这一目标......可能是我没有完全付出我的 100%,但请善待......

这是完整的代码(我希望做的部分注释),作为第一步,我只是检查是否可以获取 Vector 中的所有标记,然后解析每个 Vector 元素以生成另一个 std::pair 向量

输出:

我期望 4 ......因为有 4 个条件!

提前致谢, 维韦克

在 coliru 上工作的一些例子

0 投票
1 回答
348 浏览

c++ - 灵气:炭治[5]

我有以下结构

我把它做成一个融合结构

我的语法实现如下:

不幸的是它没有编译。现在我使用 std::string 而不是 char[5] 我没有问题。你能告诉我如何告诉 Spirit 读取 char[5] 吗?

谢谢

0 投票
1 回答
25 浏览

parsing - 精神:允许一个字符在开始但不允许在中间

到目前为止,我正在尝试为 javascript 标识符编写一个解析器,这就是我所拥有的:

此解析器适用于我的测试中的“良好标识符”列表:

但我在使用其中一个错误标识符时遇到了问题:foo$bar. 这应该是失败的,但它成功了!!并且 sintetized 属性具有值"foo"

这是调试输出foo$bar

我想要的是解析器在解析时失败,foo$bar但在解析时没有$foobar

我错过了什么?

0 投票
1 回答
218 浏览

c++ - 从 Boost::spirit 解析返回多种数据类型

我想解析大约 5-10 种不同的消息类型,它们共享一种通用格式(例如 JSON),但每种都有需要验证的特定字段。每条消息最终都应该被解析成一个自定义类/结构,该类/结构的类型不需要任何类型的转换(例如,一个字段是一个 int 而不是一个变体/元组)。我看到解决问题的两种方法:

  1. 为每个特定消息编写一个语法,处理消息格式(在本例中为 JSON 样板)的验证并验证字段的内容,返回一个真正自定义的结构

  2. 编写一个仅验证结构(仅 JSON 规则)并返回更通用的对象(具有变体/元组等字段)并在更高级别验证/转换为自定义结构的语法(转换和检查各种变体字段)

我认为这些是每个的优点和缺点:

优点 1:

  • 所有验证都在 boost::spirit 内完成
  • 业力生成器(如果编写的话)看起来像现有的精神解析代码

缺点 1:

  • 必须为将来可能发明的每种新消息类型编写和维护新语法(并且精神语法不直观)

2的优点:

  • 复杂的精神代码只写一次,很少接触

缺点 2:

  • 通用消息对象的验证和翻译将是精神应该首先消除的混乱代码

哪种方法更可取?是否有第三种方法可以使用一种语法解析为多种类型?

下面是一些示例消息和它们最终应该驻留的类:

0 投票
1 回答
81 浏览

c++ - boost::spirit::qi::parse --> 没有结果

考虑以下代码:

结果:

我很困惑为什么结果不同。获得相同结果的 qi::rule 类型的正确定义是什么?

0 投票
1 回答
172 浏览

c++ - boost::spirit::qi::parse 语法没有按预期工作

我尝试编写一个语法来解析以下语法:

  • 每个元素都应被解释为一个字符串
  • 在字符串中允许所有符号
  • 命令、参数和值之间允许有多个空格
  • 参数总是以“-”开头
  • 结果应存储在结构中:

    • m_command 应存储已解析的命令
    • m_arg 应将解析的参数和相应的值存储在向量中

我在这里的一个简短示例中添加了我当前的语法

我的问题:

向量包含比可用值更多的条目,因为空白也被解释为值