我想将C ++函数声明与默认参数值匹配,但忽略这些值。 例如:
int myFunction(int a, int b = 5 + 4);
这是词法分析者的一部分:
struct Lexer : boost::spirit::lex::lexer<lexer_type>
{
Lexer()
{
identifier = "[A-Za-z_][A-Za-z0-9_]*";
numLiteral = "([0-9]+)|(0x[0-9a-fA-F]+)";
this->self.add
("int")
('+')
('=')
('(')
(')')
(';')
(',')
(identifier)
(numLiteral);
}
};
我想写几个解析器规则,如:
function = qi::lit("int") >> lexer.identifier >> '(' >> arglist >> ')' >> ';';
arglist = (lexer.numLiteral >> lexer.identifier >> -(lit('=') >> rvalue )) % ',';
rvalue = +(qi::token() - ',' - ')');
我已经看到here“解析器原语qi :: token和qi :: tokenid现在可以在没有任何参数的情况下使用。在这种情况下,它们将匹配任何标记。”这是我想要的(以及我写的),但不幸的是它没有编译。 qi :: token()确实需要一个参数。 我错过了什么吗?
答案 0 :(得分:2)
好的,因为这显然足以回答它:
我想要的是什么(以及我写的),但不幸的是它没有编译。 qi :: token()确实需要一个参数。我错过了什么吗?
可能你没有错过:你离开()
了吗?因为在EDSL中的惯例是删除无参数版本的括号( cf。 qi::string
与qi::string("value")
)