Получу ли я более быстрый синтаксический анализатор с помощью Spirit X3, когда я использую оператор ожидания?

В духе X3 я могу построить парсер следующим образом:

const auto p = ("Number:" >> x3::_int)
             | ("String:" >> +x3::alpha);

Если я знаю, что после строки Number идет целое число, а после String все время идет строка, я могу использовать >, чтобы сказать, что после Number идет только число и так далее.

const auto p = ("Number:" > x3::_int)
             | ("String:" > +x3::alpha);

Для меня разница в том, что если синтаксический анализатор не может проанализировать ввод, возникает исключение.

Теперь мой вопрос: должен ли я использовать оператор > вместо оператора >>, когда это возможно? Является ли синтаксический анализатор, который будет создан с использованием >, быстрее, чем тот, который использует только оператор >>?


person Exagon    schedule 13.08.2016    source источник
comment
Нет — > равно >> плюс throw, если синтаксический анализ не удался.   -  person ildjarn    schedule 13.08.2016
comment
Если вы когда-нибудь задавались вопросом, что быстрее, просто измерьте это.   -  person Baum mit Augen    schedule 13.08.2016


Ответы (1)


Вы всегда должны просто профилировать вещи.

Несмотря на:

Получу ли я более быстрый синтаксический анализатор с помощью Spirit X3, когда я использую оператор ожидания?

Только в той мере, в какой это предотвращает альтернативы возврата, но если вам нужно, это все равно не делает то же самое.

person sehe    schedule 13.08.2016