c – 提升精神:如何匹配气中的任何词法分析器?

我想将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中,删除无参数版本的括号是常规的(参见qi :: string vs. qi :: string(“value”))

点赞