Можно ли назвать выражение в Boost Spirit без его назначения правилу?Выражения имени в Boost Spirit без назначения правилу
Я знаю, что вы можете назвать его по заданию к правилу, как:
using boost::spirit::standard::char_;
boost::spirit::qi::rule<> number = char_("0") | (char_("1-9") >> *char_("0-9"));
number.name("number");
Что делает отладку синтаксических ошибок проще, так как вы можете уже иметь определенную часть имени в правильном направлении.
Но возможно ли это сделать таким образом?
using boost::spirit::standard::char_;
boost::spirit::qi::rule<> twoDigits = char_("0-9") > name(char_("0-9"), "digit");
Так что исключение будет сказать, что она ожидает «цифру» в положении 2, если он получил вход как «3а» (это на самом деле не важно, что это позиция 2).
Альтернативный способ выразить это будет:
using boost::spirit::standard::char_;
boost::spirit::qi::rule<> digit = char_("0-9");
digit.name("digit");
boost::spirit::qi::rule<> twoDigits = digit > digit;
Я уже проверил источник и обнаружил, что выражение есть функция называется то, что(), который возвращает повышающий :: дух :: объект информации из которого можно получить строковое представление. Но я не смог переписать это, поскольку я не familier с Boost Proto и внутренностями Boost Spirit.
Очень хороший пример и объяснение. Это почти дало мне синтаксис, который я хотел. См. Http://coliru.stacked-crooked.com/a/2f9a72bcbb6702ac с небольшими корректировками кода, близкого к синтаксису, в примере моего вопроса. – user2525536
+1 Безумие. Интересно, что именно это покупает OP (например, на самом деле это на самом деле более легкий вес? Или просто меньше ввода - что приводит к более длинным определениям правил) – sehe
Не уверен, что теперь это более легкий вес, но он позволяет вам называть части выражения без необходимости для определения правила для этого. В Windows я получил более крупный исполняемый файл размером 1KiB, чем использование правил при компиляции с GCC 5.2.0 в 32-битном режиме. Это решение получается в меньшем исполняемом файле 1KiB, когда я компилирую его в 64-битном режиме с теми же параметрами компилятора и сборки. – user2525536