@@ -19,7 +19,7 @@ void MathParser::init() {
1919 // Добавить в init():
2020registerOperator (" =" , {
2121 Operator::Type::BINARY,
22- 0 , false , 2 ,
22+ 0 , false , false , 2 ,
2323 [this ](auto args) {
2424 if (args[0 ].type != Token::Type::VARIABLE)
2525 throw std::runtime_error (" Left operand must be a variable" );
@@ -35,23 +35,23 @@ registerOperator("=", {
3535 });
3636 registerOperator (" (" , {
3737 Operator::Type::BRACKET,
38- 0 , false , 0 , nullptr , " ("
38+ 0 , false , false , 0 , nullptr , " ("
3939 });
4040
4141 registerOperator (" )" , {
4242 Operator::Type::BRACKET,
43- 0 , false , 0 , nullptr , " )"
43+ 0 , false , false , 0 , nullptr , " )"
4444 });
4545
4646 registerOperator (" ," , {
4747 Operator::Type::COMMA,
48- 0 , false , 0 , nullptr ,
48+ 0 , false , false , 0 , nullptr ,
4949 " ,"
5050 });
5151
5252 registerOperator (" +" , {
5353 Operator::Type::BINARY,
54- 1 , false , 2 ,
54+ 1 , false , false , 2 ,
5555 [this ](auto args) {
5656 double left = tokenToDouble (args[0 ]);
5757 double right = tokenToDouble (args[1 ]);
@@ -62,7 +62,7 @@ registerOperator("=", {
6262
6363 registerOperator (" -" , {
6464 Operator::Type::BINARY,
65- 1 , false , 2 ,
65+ 1 , false , false , 2 ,
6666 [this ](auto args) {
6767 double left = tokenToDouble (args[0 ]);
6868 double right = tokenToDouble (args[1 ]);
@@ -73,7 +73,7 @@ registerOperator("=", {
7373
7474 registerOperator (" *" , {
7575 Operator::Type::BINARY,
76- 2 , false , 2 ,
76+ 2 , false , false , 2 ,
7777 [this ](auto args) {
7878 double left = tokenToDouble (args[0 ]);
7979 double right = tokenToDouble (args[1 ]);
@@ -84,7 +84,7 @@ registerOperator("=", {
8484
8585 registerOperator (" /" , {
8686 Operator::Type::BINARY,
87- 2 , false , 2 ,
87+ 2 , false , false , 2 ,
8888 [this ](auto args) {
8989 double left = tokenToDouble (args[0 ]);
9090 double right = tokenToDouble (args[1 ]);
@@ -96,7 +96,7 @@ registerOperator("=", {
9696
9797 registerOperator (" ^" , {
9898 Operator::Type::BINARY,
99- 4 , true , 2 ,
99+ 4 , true , false , 2 ,
100100 [this ](auto args) {
101101 double left = tokenToDouble (args[0 ]);
102102 double right = tokenToDouble (args[1 ]);
@@ -107,7 +107,7 @@ registerOperator("=", {
107107
108108 registerOperator (" ~" , {
109109 Operator::Type::UNARY,
110- 3 , true , 1 ,
110+ 3 , true , false , 1 ,
111111 [this ](auto args) {
112112 double arg = tokenToDouble (args[0 ]);
113113 return Token{Token::Type::NUMBER, -arg};
@@ -117,7 +117,7 @@ registerOperator("=", {
117117
118118 registerOperator (" sqrt" , {
119119 Operator::Type::FUNCTION,
120- 5 , false , 1 ,
120+ 5 , false , false , 1 ,
121121 [this ](auto args) {
122122 double arg = tokenToDouble (args[0 ]);
123123 return Token{Token::Type::NUMBER, sqrt (arg)};
@@ -126,7 +126,7 @@ registerOperator("=", {
126126 });
127127 registerOperator (" sin" , {
128128 Operator::Type::FUNCTION,
129- 5 , false , 1 ,
129+ 5 , false , false , 1 ,
130130 [this ](auto args) {
131131 double arg = tokenToDouble (args[0 ]);
132132 return Token{Token::Type::NUMBER, sin (arg)};
@@ -135,7 +135,7 @@ registerOperator("=", {
135135 });
136136 registerOperator (" cos" , {
137137 Operator::Type::FUNCTION,
138- 5 , false , 1 ,
138+ 5 , false , false , 1 ,
139139 [this ](auto args) {
140140 double arg = tokenToDouble (args[0 ]);
141141 return Token{Token::Type::NUMBER, cos (arg)};
@@ -144,7 +144,7 @@ registerOperator("=", {
144144 });
145145 registerOperator (" tan" , {
146146 Operator::Type::FUNCTION,
147- 5 , false , 1 ,
147+ 5 , false , false , 1 ,
148148 [this ](auto args) {
149149 double arg = tokenToDouble (args[0 ]);
150150 return Token{Token::Type::NUMBER, tan (arg)};
@@ -267,7 +267,8 @@ std::vector<MathParser::Token> MathParser::toRPN(const std::string& expression)
267267 RPN.push_back (Token{Token::Type::OPERATOR,topOp.symbol });
268268 }
269269 opStack.push (curOp);
270- expectOperand = true ;
270+ if (curOp.isPostfix ) expectOperand = false ;
271+ else expectOperand = true ;
271272 i++;
272273 }
273274 }
0 commit comments