Я хотел бы совместить объявление функции C++ с значениями аргументов по умолчанию, но игнорируя эти значения. Например:boost spirit: как совместить любой токен lexer в ци?
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() действительно нуждается в одном аргументе. Я что-то пропустил?
Вы не показываете SSCCE, поэтому я не буду тратить время. Вы пробовали без круглых скобок (это соглашение EDSL, _cf._ 'qi :: string' vs.' qi :: string ("value")) – sehe
Спасибо @sehe для подсказки: нет круглых скобок. Теперь он компилируется. Кстати, что такое EDSL? – ZeeByeZon
Edsl: [Язык встроенных доменных имен] (http://c2.com/cgi/wiki?EmbeddedDomainSpecificLanguage) (примеры шаблонов выражений духа - это ленивые субъекты Феникса [в семантических действиях]) – sehe