- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了这段代码示例并期望它打印OPERATION( OPERATOR(aaa) ID(bbb) )
但我只得到OPERATION ( OPERATOR(aaa) )
反而。 result2
和 it1 == it2
都为真。为什么不解析操作数?
#include "stdafx.h"
#include <boost/serialization/strong_typedef.hpp>
#include <boost/bind.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/spirit/include/phoenix.hpp>
#include <boost/spirit/include/phoenix1.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_object.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/variant/recursive_variant.hpp>
#include <iostream>
#include <string>
namespace NsSemSDK
{
struct STreeConstructionRuleRegexp {
std::string m_strEntity;
};
struct STreeConstructionRuleString {
std::string m_strEntity;
};
struct STreeConstructionRuleIdentifier {
std::string m_strEntity;
};
typedef int STreeConstructionRuleNumber;
typedef std::string STreeConstructionRuleOperation;
typedef boost::variant<STreeConstructionRuleRegexp, STreeConstructionRuleNumber, STreeConstructionRuleString, STreeConstructionRuleIdentifier> STreeConstructionRuleOperand;
typedef boost::tuple<STreeConstructionRuleOperation, std::vector<STreeConstructionRuleOperand> > STreeConstructionRuleOperationWithOperands;
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleIdentifier& val);
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleString& val);
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleRegexp& val);
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleOperationWithOperands& val);
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleOperationWithOperands& val)
{
stream << "OPERATION( " << "OPERATOR(" << val.get<0>() << ")";
for (int i = 0; i < val.get<1>().size(); i++)
{
stream << " " << val.get<1>()[i];
}
stream << " )";
return stream;
}
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleRegexp& val)
{
return stream << "REGEXP(" << val.m_strEntity << ")";
}
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleString& val)
{
return stream << "STR(" << val.m_strEntity << ")";
}
std::ostream& operator<<(std::ostream& stream, const NsSemSDK::STreeConstructionRuleIdentifier& val)
{
return stream << "ID(" << val.m_strEntity << ")";
}
}
BOOST_FUSION_ADAPT_STRUCT(
NsSemSDK::STreeConstructionRuleRegexp,
(std::string, m_strEntity)
)
BOOST_FUSION_ADAPT_STRUCT(
NsSemSDK::STreeConstructionRuleString,
(std::string, m_strEntity)
)
BOOST_FUSION_ADAPT_STRUCT(
NsSemSDK::STreeConstructionRuleIdentifier,
(std::string, m_strEntity)
)
namespace NsSemSDK{
namespace qi = boost::spirit::qi;
namespace phoenix = boost::phoenix;
template <typename Iterator, typename Skipper>
struct STreeContructionRulesGrammar : qi::grammar<Iterator, STreeConstructionRuleOperationWithOperands(), Skipper> // std::vector<STreeConstructionRule>()
{
qi::rule<Iterator, STreeConstructionRuleOperationWithOperands(), Skipper> m_oOperationWithOperands;
qi::rule<Iterator, STreeConstructionRuleOperation(), Skipper> m_oOperation;
qi::rule<Iterator, std::vector<STreeConstructionRuleOperand>(), Skipper> m_oOperandsList;
qi::rule<Iterator, STreeConstructionRuleOperand(), Skipper> m_oOperand;
qi::rule<Iterator, STreeConstructionRuleString(), Skipper> m_oString;
qi::rule<Iterator, STreeConstructionRuleRegexp(), Skipper> m_oRegexp;
qi::rule<Iterator, STreeConstructionRuleNumber(), Skipper> m_oNumber;
qi::rule<Iterator, STreeConstructionRuleIdentifier(), Skipper> m_oIdentifier;
STreeContructionRulesGrammar() : STreeContructionRulesGrammar::base_type(m_oOperationWithOperands)
{
m_oOperationWithOperands %= m_oOperation > m_oOperandsList;
m_oOperation %= qi::lexeme[+(qi::alnum)];
m_oOperandsList %= qi::lit("[") >> (m_oOperand % ',') >> qi::lit("]");
m_oOperand %= m_oString | m_oRegexp | m_oNumber | m_oIdentifier;
m_oString %= qi::lit("\"") >> qi::lexeme[*(qi::char_ - '"')] >> qi::lit("\"");
m_oRegexp %= qi::lit("'") >> qi::lexeme[*(qi::char_ - '\'')] >> qi::lit("'");
m_oNumber %= qi::int_;
m_oIdentifier %= +(qi::alpha) >> qi::eps;
}
};
}
using namespace NsSemSDK;
int _tmain(int argc, _TCHAR* argv[])
{
std::string str("aaa [bbb]");
STreeContructionRulesGrammar<std::string::iterator, boost::spirit::ascii::space_type> grammar;
STreeConstructionRuleOperationWithOperands result;
std::string::iterator it1 = str.begin(), it2 = str.end();
bool result2 = qi::phrase_parse(it1, it2, grammar, boost::spirit::ascii::space, result);
std::cout << result << std::endl;
return 0;
}
最佳答案
我这样使用 BOOST_SPIRIT_DEBUG
如您所见,解析调试跟踪显示 bbb
正在作为标识符进行匹配:
<m_oOperationWithOperands>
<try>aaa [bbb]</try>
<m_oOperation>
<try>aaa [bbb]</try>
<success> [bbb]</success>
<attributes>[[a, a, a]]</attributes>
</m_oOperation>
<m_oOperandsList>
<try> [bbb]</try>
<m_oOperand>
<try>bbb]</try>
<m_oString>
<try>bbb]</try>
<fail/>
</m_oString>
<m_oRegexp>
<try>bbb]</try>
<fail/>
</m_oRegexp>
<m_oNumber>
<try>bbb]</try>
<fail/>
</m_oNumber>
<m_oIdentifier>
<try>bbb]</try>
<success>]</success>
<attributes>[[[b, b, b]]]</attributes>
</m_oIdentifier>
<success>]</success>
<attributes>[[[b, b, b]]]</attributes>
</m_oOperand>
<success></success>
<attributes>[[[[b, b, b]]]]</attributes>
</m_oOperandsList>
<success></success>
<attributes>[OPERATION( OPERATOR(aaa) )]</attributes>
</m_oOperationWithOperands>
到目前为止,还不错。所以问题是为什么结果没有被分配到规则 m_oOperationWithOperands
中的元组元素中。在这里,恐怕我不能告诉你你应该做什么。
我根据自己的经验检查了适当的 fusion 适应是否对元组
有效。一时兴起我变了
#include <boost/fusion/include/adapt_struct.hpp>
到
#include <boost/fusion/include/adapted.hpp>
现在输出是:
OPERATION( OPERATOR(aaa) ID(bbb) )
现场观看 http://liveworkspace.org/code/c0da90349fbcae6655ab3e6a45f1ef69
P.S.: I'd be tempted to say it is a bug in Qi that no diagnostic exists saying that the exposed attributes are being incompletely copied to the attribute reference. You may want to post this at https://lists.sourceforge.net/lists/listinfo/spirit-general
关于Boost::spirit 序列没有被解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12974941/
我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。 尽管知道我的数据库查
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在尝试运行 Android 应用程序时遇到问题并收到以下错误 java.lang.NoClassDefFoundError: com.parse.Parse 当我尝试运行该应用时。 最佳答案 在这
有什么办法可以防止etree在解析HTML内容时解析HTML实体吗? html = etree.HTML('&') html.find('.//body').text 这给了我 '&' 但我想
我有一个有点疯狂的例子,但对于那些 JavaScript 函数作用域专家来说,它看起来是一个很好的练习: (function (global) { // our module number one
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短的描述,就像您链接到 Facebook 上的内容一样。 当用户向站点添加链接时将调用它,因此在客户端启动
在 VS Code 中本地开发时,包解析为 C:/Users//AppData/Local/Microsoft/TypeScript/3.5/node_modules/@types//index而不是
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我被赋予了将一种语言“翻译”成另一种语言的工作。对于使用正则表达式的简单逐行方法来说,源代码过于灵活(复杂)。我在哪里可以了解更多关于词法分析和解析器的信息? 最佳答案 如果你想对这个主题产生“情绪化
您好,我在解析此文本时遇到问题 { { { {[system1];1;1;0.612509325}; {[system2];1;
我正在为 adobe after effects 在 extendscript 中编写一些代码,最终变成了 javascript。 我有一个数组,我想只搜索单词“assemble”并返回整个 jc3_
我有这段代码: $(document).ready(function() { // }); 问题:FB_RequireFeatures block 外部的代码先于其内部的代码执行。因此 who
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些
1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 X
【PHP代码】 复制代码 代码如下: $stmt = mssql_init('P__Global_Test', $conn) or die("initialize sto
在SQL查询分析器执行以下代码就可以了。 复制代码代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor curs
前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习🤭 题目 题目一: 二维数组中的
我是一名优秀的程序员,十分优秀!