gpt4 book ai didi

c++ - 振奋 spirit : how to match any lexer token in qi?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:13 25 4
gpt4 key购买 nike

我想将 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() 确实至少需要一个参数。我错过了什么吗?

最佳答案

好的,因为这显然足以回答它:

Which is what I want (and what I wrote), but unfortunately it does not compile. qi::token() really needs at leat one argument. Did I miss something?

可能您还没有错过:您是否离开了 ()?因为在 EDSL 中,对于无参数版本(cf. qi::string vs. qi::string("value"))

关于c++ - 振奋 spirit : how to match any lexer token in qi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com