v4 parser: correcting parentheses bug

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@661 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
michel 2006-03-08 13:29:15 +00:00
parent 0430c4ae42
commit 3a482502c7
2 changed files with 8 additions and 9 deletions

Binary file not shown.

View File

@ -1011,8 +1011,9 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
NodeID current_token_ID;
stack_token.push(StartID);
int precedence_last_op = operator_table.precedence(StartID->op_code);
int precedence_last_op = 0;
int last_op_code = 0;
int on_the_right_of_upper_node = 0;
while (stack_token.size() > 0)
{
@ -1044,8 +1045,9 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
// if current operator is not a temporary variable and
// of lesser precedence than previous one, insert '('
if ( precedence_current_op < precedence_last_op ||
((last_op_code == MINUS || last_op_code == DIVIDE) &
precedence_current_op == precedence_last_op)||
(on_the_right_of_upper_node == 1 &&
(last_op_code == MINUS || last_op_code == DIVIDE) &&
(precedence_current_op == precedence_last_op))||
current_op_code == UMINUS)
{
exp << "(";
@ -1072,6 +1074,7 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
precedence_last_op = 0;
current_token_ID->close_parenthesis = 1;
}
on_the_right_of_upper_node = 0;
stack_token.push(current_token_ID->id1);
}
// deal with right argument when left branch is entirely explored
@ -1087,17 +1090,13 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
{
exp << current_token_ID->op_name;
precedence_last_op = precedence_current_op;
last_op_code = current_op_code;
on_the_right_of_upper_node = 1;
stack_token.push(current_token_ID->id2);
}
}
else
{
// if ( (offset == 0 && current_op_code == POWER) ||
// ( precedence_current_op > precedence_last_op &&
// operator_table.isfunction(current_op_code) == false) ||
// (current_op_code == MINUS &&
// precedence_current_op == precedence_last_op) ||
// current_op_code == UMINUS)
if ( current_token_ID->close_parenthesis == 1)
{
exp << ")";