проверить сдвоенные символы с духом :: ци

Мне нужно проверить текст на двойные символы. Например, «1 + 1 * 2» должно быть в порядке, но «1 ** 2 + 3» или «—1 + 4 * 3» не должны. Рассмотрим часть примера Spirit Calc.

     expression =
term[_val=_1]
>> *(   ('+' >> term[_val+=_1])
|   ('-' >> term[_val-=_1])
);

term =
factor[_val=_1]
>> *(   ('*' >> factor[_val*=_1])
|   ('/' >> factor[_val/=_1])
);

factor =
double_[_val=_1]
|   '(' >> expression[_val=_1] >> ')'
|   ('-' >> factor[_val=_1])
|   ('+' >> factor[_val=_1]);

Фраза_parse возвращает истину с такими выражениями, как «1 +++ 1» или «1 ** — 1». Я пытался использовать повтор, как это:

      term =
factor[_val=_1]
>> *(   (repeat(0)[char_('*')] >> factor[_val*=_1])
|   ('/' >> factor[_val/=_1])
);

Но это не помогает. Что я скучаю?
Благодарю.

РЕДАКТИРОВАТЬ: нашел ответ. Следует сравнивать строковые итераторы после фразу_parse, но не выводим фразу_parse.

2

Решение

Нашел ответ. Следует сравнивать строковые итераторы после фразу_parse, но не выводим фразу_parse.

0

Другие решения

В этом случае ‘1 +++++ 1’ правильно обрабатывается, так как фактор рекурсивно принимает + (вероятно, предназначен для унарного +/-).

Разделите это

  factor = ('-' >>  value[_val=-_1])
| ('+' >> value[_val= _1])
| value [_val = _1];
value = double_ | '(' >> expression >> ')'
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector