为什么这个提升::精神::气规则不起作用
why does this boost::spirit::qi rule not work?
我有一个定义以下规则的语法:
constantValue = qi::token(ID_FLOAT) | qi::token(ID_INTEGER);
postfixExpression = primaryExpression |
(postfixExpression >> qi::token(ID_OPENBRACKET) >> qi::token(ID_INTEGER) >> qi::token(ID_CLOSEBRACKET)) |
(postfixExpression >> qi::token(ID_DOT) >> qi::token(ID_IDENTIFIER));
primaryExpression = qi::token(ID_IDENTIFIER) |
constantValue |
(qi::token(ID_OPENPAREN) >> primaryExpression >> qi::token(ID_CLOSEPAREN));
ges = postfixExpression >> qi::eoi;
我希望它匹配以下字符串:
测试[1] testident.ident
它不应该匹配
测试[1.2] 睾丸5
但它无法匹配前 2 个字符串。
词法分析器构造函数如下所示:
custom_lexer()
: identifier("[a-zA-Z_][a-zA-Z0-9_]*")
, white_space("[ \t\n]+")
, integer_value("[1-9][0-9]*")
, hex_value("0[xX][0-9a-fA-F]+")
, float_value("[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?")
, float_value2("[0-9]+\.([eE][+-]?[0-9]+)?")
, punctuator("&>|\*\*|\*|\+|-|~|!|\/|%|<<|>>|<|>|<=|>=|==|!=|\^|&|\||\^\^|&&|\|\||\?|:|,")// [ ] ( ) . &> ** * + - ~ ! / % << >> < > <= >= == != ^ & | ^^ && || ? : ,
{
using boost::spirit::lex::_start;
using boost::spirit::lex::_end;
this->self.add
(identifier, ID_IDENTIFIER)
/*(white_space, ID_WHITESPACE)*/
(integer_value, ID_INTEGER)
(hex_value, ID_INTEGER)
(float_value, ID_FLOAT)
(float_value2, ID_FLOAT)
("\(", ID_OPENPAREN)
("\)", ID_CLOSEPAREN)
("\[", ID_OPENBRACKET)
("\]", ID_CLOSEBRACKET)
("\.", ID_DOT)
(punctuator, ID_PUNCTUATOR)
;
this->self("WS") = white_space;
}
为什么我没有得到上述字符串的匹配项?
谢谢托比亚斯
我找到了原因 - 我不得不重新表述规则:
postfixExpression = primaryExpression >> *((qi::token(ID_OPENBRACKET) >> qi::token(ID_INTEGER) >> qi::token(ID_CLOSEBRACKET)) | (qi::token(ID_DOT) >> qi::token(ID_IDENTIFIER)));
我不知道为什么有必要,但现在它似乎有效。
相关文章:
- 增强精神解析器规则以检测语句中的特殊结尾
- 提升精神 QI:在元组上自动规则演绎,在替代函数中带有序列
- 精神:不能在其规则定义中使用x3::skip(skipper)[一些递归规则]
- 使用提升精神的递归 BNF 规则
- 精神X3,如何获得属性类型以匹配规则类型
- 精神 X3:本地定义的规则定义必须附加属性
- 如何在VS2017中在提升精神x3中制定递归规则
- 提升精神范围字符规则创建空字符
- 不应用提升精神解析规则
- Boost::精神与织物方法在一条规则中
- 使用“alias()”解析精神规则时访问冲突
- 可以对提升精神规则进行参数化
- 为什么这个提升::精神::气规则不起作用
- 为什么这个提升::精神::qi规则与输入不匹配
- 将属性传递给提升精神的子规则
- 促进精神规则-规则串联
- 提升::精神::气-将规则划分为不同的类别
- 在提升精神因果报应中,如何可能将属性传递给子规则
- 当一个规则使用BOOST_FUSION_ADAPT_STRUCT时,精神因果报应语法问题
- 如何从循环中构建提升::精神规则