二重記号のテキストを確認する必要があります。たとえば、「1 + 1 * 2」は問題ありませんが、「1 ** 2+3」または「-1+4*3」は問題ありません。精神計算の例の一部を考えてみましょう。
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]);
phrase_parseは、「1 +++1」や「1**-1」などの式でtrueを返します。私はこのように繰り返しを使用しようとしました:
term =
factor[_val=_1]
>> *( (repeat(0)[char_('*')] >> factor[_val*=_1])
| ('/' >> factor[_val/=_1])
);
しかし、それは役に立ちません。何が恋しいですか?ありがとう。
編集:答えを見つけました。phrase_parseの出力の後に文字列イテレーターを比較する必要がありますが、phrase_parseの出力は比較しないでください。