fixed a fruther bracket bug.

This commit is contained in:
suter_a 2024-04-20 17:39:18 +02:00
parent cedaabeb98
commit 26e25ce10b
2 changed files with 5 additions and 9 deletions

View File

@ -594,10 +594,9 @@ void PFunction::EvalTreeForString(tree_parse_info<> info)
* *
* \param i iterator of the AST tree * \param i iterator of the AST tree
*/ */
void PFunction::EvalTreeForStringExpression(iter_t const& i) void PFunction::EvalTreeForStringExpression(iter_t const& i, bool funcFlag)
{ {
static Int_t termOp = 0; static Int_t termOp = 0;
static bool funcFlag = false;
if (i->value.id() == PFunctionGrammar::realID) { if (i->value.id() == PFunctionGrammar::realID) {
assert(i->children.size() == 0); assert(i->children.size() == 0);
@ -629,21 +628,19 @@ void PFunction::EvalTreeForStringExpression(iter_t const& i)
fFuncString += boost::algorithm::trim_copy(std::string(i->value.begin(), i->value.end())).c_str(); fFuncString += boost::algorithm::trim_copy(std::string(i->value.begin(), i->value.end())).c_str();
} else if (i->value.id() == PFunctionGrammar::functionID) { } else if (i->value.id() == PFunctionGrammar::functionID) {
assert(i->children.size() == 3); assert(i->children.size() == 3);
funcFlag = true;
fFuncString += std::string(i->value.begin(), i->value.end()).c_str(); // keep function name fFuncString += std::string(i->value.begin(), i->value.end()).c_str(); // keep function name
fFuncString += "("; fFuncString += "(";
// '(', expression, ')' // '(', expression, ')'
EvalTreeForStringExpression(i->children.begin()+1); // the real stuff EvalTreeForStringExpression(i->children.begin()+1, true); // the real stuff
fFuncString += ")"; fFuncString += ")";
} else if (i->value.id() == PFunctionGrammar::powerID) { } else if (i->value.id() == PFunctionGrammar::powerID) {
assert(i->children.size() == 5); assert(i->children.size() == 5);
funcFlag = true;
fFuncString += std::string(i->value.begin(), i->value.end()).c_str(); // keep function name fFuncString += std::string(i->value.begin(), i->value.end()).c_str(); // keep function name
fFuncString += "("; fFuncString += "(";
// '(', expression, ',' expression, ')' // '(', expression, ',' expression, ')'
EvalTreeForStringExpression(i->children.begin()+1); // base expression EvalTreeForStringExpression(i->children.begin()+1, true); // base expression
fFuncString += ","; fFuncString += ",";
EvalTreeForStringExpression(i->children.begin()+3); // exponent expression EvalTreeForStringExpression(i->children.begin()+3, true); // exponent expression
fFuncString += ")"; fFuncString += ")";
} else if (i->value.id() == PFunctionGrammar::factorID) { } else if (i->value.id() == PFunctionGrammar::factorID) {
EvalTreeForStringExpression(i->children.begin()); EvalTreeForStringExpression(i->children.begin());
@ -689,7 +686,6 @@ void PFunction::EvalTreeForStringExpression(iter_t const& i)
} }
if ((termOp > 0) && !funcFlag) if ((termOp > 0) && !funcFlag)
fFuncString += ")"; fFuncString += ")";
funcFlag = false;
} else if (i->value.id() == PFunctionGrammar::assignmentID) { } else if (i->value.id() == PFunctionGrammar::assignmentID) {
assert(i->children.size() == 3); assert(i->children.size() == 3);
EvalTreeForStringExpression(i->children.begin()); EvalTreeForStringExpression(i->children.begin());

View File

@ -123,7 +123,7 @@ class PFunction {
Int_t fFuncNo; ///< function number, i.e. FUNx with x the function number Int_t fFuncNo; ///< function number, i.e. FUNx with x the function number
virtual void EvalTreeForString(tree_parse_info<> info); virtual void EvalTreeForString(tree_parse_info<> info);
virtual void EvalTreeForStringExpression(iter_t const& i); virtual void EvalTreeForStringExpression(iter_t const& i, bool funcFlag=false);
TString fFuncString; ///< text representation of the function TString fFuncString; ///< text representation of the function
PMetaData fMetaData; ///< keeps meta data from data files (field, energy, temperature, ...) PMetaData fMetaData; ///< keeps meta data from data files (field, energy, temperature, ...)