fixed a fruther bracket bug.
This commit is contained in:
parent
cedaabeb98
commit
26e25ce10b
@ -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());
|
||||||
|
@ -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, ...)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user