问题标签 [boost-spirit-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.
compilation - 有没有办法编写单独编译的 boost::spirit::qi 语法?
Boost Spirit Qi 解析器语法非常棒,我一直将它们用于小事情。但是,有时我希望能够编写单独的语法。
通过#include 适当的语法并将它们拼接在一起,这很容易在单个编译中完成。然而,这使得编译时间开始飞速发展。还有其他缺点。
有没有办法编写单独编译的语法?换句话说,我想在头文件中定义语法的接口,在单独的编译单元中实现模板和特定迭代器的实例化,然后能够在没有完整模板的情况下使用另一个语法编译时可见的定义。换句话说,我希望能够在规则中间接使用语法。
这样的事情可能吗?如果是的话,一个人会怎么做?
c++ - Boost Spirit 2.4.2:无法提取字符串
在解决问题Boost Spirit: Error C2664, Cannot convert 'const boost::phoenix::actor<Eval>' to 'char'之后,我还有一个问题:
为什么将下面的代码用于 js_key 和 js_string,我无法捕获以“str”或“str”格式打印的字符串。那些总是返回空白!
例如:
输入:{"a":"aa", b:'c'}
实际输出:
预期输出:
请多多指教。谢谢!
c++ - 为什么 boost::spirit::qi::parse() 没有设置这个 boost::variant 的值?
当试图将文本解析为 boost::variant 时,变量的值不会改变。解析器本身似乎工作正常,所以我的假设是我对变体代码做错了。
我正在使用 boost 1.46.1,以下代码在Visual Studio 2008 中编译。
第一次更新
hkaiser 指出,规则和语法模板参数不能是Variant
but Variant()
。
这有点“进一步”,因为我现在在boost_1_46_1\boost\variant\variant.hpp(1304)
. 评论说:
所以显然表达式的属性(qi::double_ | +qi::char_)
不是boost::variant<double, std::string>
。但那是什么?
第二次更新
使用typedef boost::variant<double, std::vector<char>> Variant;
适用于解析器。但是,这并不像 std::string 那样容易使用...
c++ - 提升灵气规则的属性问题
我有以下代码无法编译,但是我不知道问题出在哪里:
以下是错误消息:
有没有人可以提供一些建议?谢谢
boost - 将数据分配给规则内向量中的给定元素
我正在尝试设置一个解析器,给定一个值,可以将其分配给向量的某个元素,但我不完全确定如何实现它。
假设以下代码解析字符串(0){**+*+}
。它应该每增加bar.a[0]
一次,每+
增加bar.b[0]
一次*
。我遇到的问题是我不确定如何使用以下方法获取对向量元素的引用_a
:
这无法编译并出现以下错误:
所以,很明显,我不能在at_c
. 我也知道,即使可以,如果给定位置超出范围,也会出现重新调整矢量大小的问题。
我将如何实现这样的事情?我只是以完全错误的方式去做这件事吗?
c++ - 无法在 Spirit:: Qi 中定义规则
我正在尝试将 Unix 文件路径解析为文件夹对(键/值对 - 根据我的应用程序的需要)。问题是我无法正确定义使用 qi::rule 的解析器。我得到了我无法完全理解的编译器错误页面(对不起,如果问题听起来很简单,但我真的卡住了,无法继续)
下面是程序片段。
更新:我已经按照 Nicol 和 ildjarn 的建议修改了程序,但问题仍然存在。
错误:
你能帮我解决这个问题吗?
谢谢
c++ - Boost Spirit 规则和语法中模板参数中的括号
看看这个实现 Spirit 解析器的示例,当我尝试编写类似的东西时,有些东西让我很吃惊。
语法的属性模板参数(std::map<std::string, std::string>()
)和规则的签名模板参数(例如qi::rule<Iterator, std::string()> key, value
)包含括号。
我以前从未见过这个,我在编写自己的版本时无意中省略了。这导致我的解析器没有生成正确的输出运行时间(输出映射为空)。
这些括号的目的是什么?我的猜测是,这使得该规则的属性成为该类型的对象。
c++ - BOOST_FUSION_ADAPT_STRUCT 没有使用正确数量的参数
我正在使用 Boost::Spirit 将一些文本解析为结构。这需要使用 BOOST_FUSION_ADAPT_STRUCT 来解析文本并直接存储到结构中。我知道宏有 2 个参数:结构名称作为第一个参数,所有结构成员作为第二个参数。我只通过了那两个。但我得到一个编译错误说,
这是代码片段。如果您需要整个代码,请告诉我。
谢谢。
这是我要解析的规则,
parsing - 将字符串解析为 int 或使用 boost 精神浮动
我需要将 wstring 解析为 int、float 或字符串本身。我发现了一个类似于我的问题Here但我不明白如何使用解析器。我没有找到 test_parser 方法。问题是:在实现了解析器的自定义规则之后,如何使用它们?
c++ - 使用替代运算符“|”提升精神 失败!当有两个可能的规则时
我正在研究一个http解析器。当我尝试使用替代运算符进行解析时,它发现了一个问题。我可以使用hold []修复它们与属性中的值无关。当规则开头有两条相似的规则时,就会出现问题。这里有一些简单的规则来证明我的问题;
qi::parse
然后,如果输入字符串喜欢,
我会使用它来解析此规则;"/abcd"
但是,当我在第一条规则之前切换第二条规则时。解析器将返回 true 我认为问题在于,当解析器使用第一条规则使用输入时,它发现第一条规则失败。它不会返回到第二条规则,这是第一条规则的替代品。
我尝试hold[]
使用第一条规则,但它只有助于生成属性。它不能解决这个问题。我不知道如何解决这个问题,因为 HTTP 有很多规则,它们的规则开头与其他规则相同。
===========关于我的代码的更多信息=============================
这是我的解析函数一个字符串
我主要有这段代码;
我得到了这个结果;
[不正确]/html查询?[dead with]/htmlquery <= 你可以看到它不能使用 '?'
但是,当我像这样切换规则时;(我把“rule_w_question”放在“rule_wo_question”之前)
输出将是;[正确]/html查询?
第一个版本(错误的)似乎解析消耗'/htmlquery'(“rule_wo_question”)然后它发现它不能消耗'?这使这条规则失效。那么这个规则就不能转到替代规则 ("rule_w_question") 。最后程序返回“[不正确]”
第二个版本我在“rule_wo_question”之前切换了“rule_w_question”。这就是解析器返回“[正确]”的原因。
==================================================== ============ 我的boost 1.47的整个代码与pthread和boost_filesystem链接这里是我的主要.c
结果是