www.mooseframework.org
Public Types | Public Member Functions | Protected Attributes | List of all members
ExpressionBuilder::EBBinaryOpTermNode Class Reference

Node representing a binary operator. More...

#include <ExpressionBuilder.h>

Inheritance diagram for ExpressionBuilder::EBBinaryOpTermNode:
[legend]

Public Types

enum  NodeType {
  ADD, SUB, MUL, DIV,
  MOD, POW, LESS, GREATER,
  LESSEQ, GREATEREQ, EQ, NOTEQ
}
 

Public Member Functions

 EBBinaryOpTermNode (EBTermNode *left, EBTermNode *right, NodeType type)
 
virtual EBBinaryOpTermNodeclone () const
 
virtual std::string stringify () const
 
virtual int precedence () const
 
virtual unsigned int substitute (const EBSubstitutionRuleList &rule)
 

Protected Attributes

NodeType _type
 
EBTermNode_left
 
EBTermNode_right
 

Detailed Description

Node representing a binary operator.

Definition at line 203 of file ExpressionBuilder.h.

Member Enumeration Documentation

◆ NodeType

Enumerator
ADD 
SUB 
MUL 
DIV 
MOD 
POW 
LESS 
GREATER 
LESSEQ 
GREATEREQ 
EQ 
NOTEQ 

Definition at line 206 of file ExpressionBuilder.h.

207  {
208  ADD,
209  SUB,
210  MUL,
211  DIV,
212  MOD,
213  POW,
214  LESS,
215  GREATER,
216  LESSEQ,
217  GREATEREQ,
218  EQ,
219  NOTEQ
220  };

Constructor & Destructor Documentation

◆ EBBinaryOpTermNode()

ExpressionBuilder::EBBinaryOpTermNode::EBBinaryOpTermNode ( EBTermNode left,
EBTermNode right,
NodeType  type 
)
inline

Definition at line 222 of file ExpressionBuilder.h.

223  : EBBinaryTermNode(left, right), _type(type){};

Member Function Documentation

◆ clone()

virtual EBBinaryOpTermNode* ExpressionBuilder::EBBinaryOpTermNode::clone ( ) const
inlinevirtual

Implements ExpressionBuilder::EBTermNode.

Definition at line 224 of file ExpressionBuilder.h.

225  {
226  return new EBBinaryOpTermNode(_left->clone(), _right->clone(), _type);
227  };

◆ precedence()

int ExpressionBuilder::EBBinaryOpTermNode::precedence ( ) const
virtual

Implements ExpressionBuilder::EBTermNode.

Definition at line 117 of file ExpressionBuilder.C.

118 {
119  switch (_type)
120  {
121  case ADD:
122  case SUB:
123  return 6;
124  case MUL:
125  case DIV:
126  case MOD:
127  return 5;
128  case POW:
129  return 2;
130  case LESS:
131  case GREATER:
132  case LESSEQ:
133  case GREATEREQ:
134  return 8;
135  case EQ:
136  case NOTEQ:
137  return 9;
138  }
139 
140  mooseError("Unknown type.");
141 }

◆ stringify()

std::string ExpressionBuilder::EBBinaryOpTermNode::stringify ( ) const
virtual

Implements ExpressionBuilder::EBTermNode.

Definition at line 92 of file ExpressionBuilder.C.

93 {
94  const char * name[] = {"+", "-", "*", "/", "%", "^", "<", ">", "<=", ">=", "=", "!="};
95  std::ostringstream s;
96 
97  if (_left->precedence() > precedence())
98  s << '(' << *_left << ')';
99  else
100  s << *_left;
101 
102  s << name[_type];
103 
104  // these operators are left associative at equal precedence
105  // (this matters for -,/,&,^ but not for + and *)
106  if (_right->precedence() > precedence() ||
107  (_right->precedence() == precedence() &&
108  (_type == SUB || _type == DIV || _type == MOD || _type == POW)))
109  s << '(' << *_right << ')';
110  else
111  s << *_right;
112 
113  return s.str();
114 }

◆ substitute()

unsigned int ExpressionBuilder::EBBinaryTermNode::substitute ( const EBSubstitutionRuleList rule)
virtualinherited

Reimplemented from ExpressionBuilder::EBTermNode.

Reimplemented in ExpressionBuilder::EBTernaryTermNode.

Definition at line 326 of file ExpressionBuilder.C.

327 {
328  unsigned int nrule = rules.size();
329  unsigned int success = 0;
330 
331  for (unsigned int i = 0; i < nrule; ++i)
332  {
333  EBTermNode * replace = rules[i]->apply(_left);
334  if (replace != NULL)
335  {
336  delete _left;
337  _left = replace;
338  success = 1;
339  break;
340  }
341  }
342 
343  if (success == 0)
344  success += _left->substitute(rules);
345 
346  for (unsigned int i = 0; i < nrule; ++i)
347  {
348  EBTermNode * replace = rules[i]->apply(_right);
349  if (replace != NULL)
350  {
351  delete _right;
352  _right = replace;
353  return success + 1;
354  }
355  }
356 
357  return success + _right->substitute(rules);
358 }

Member Data Documentation

◆ _left

EBTermNode* ExpressionBuilder::EBBinaryTermNode::_left
protectedinherited

Definition at line 198 of file ExpressionBuilder.h.

◆ _right

EBTermNode* ExpressionBuilder::EBBinaryTermNode::_right
protectedinherited

Definition at line 199 of file ExpressionBuilder.h.

◆ _type

NodeType ExpressionBuilder::EBBinaryOpTermNode::_type
protected

Definition at line 233 of file ExpressionBuilder.h.


The documentation for this class was generated from the following files:
ExpressionBuilder::EBBinaryTermNode::_right
EBTermNode * _right
Definition: ExpressionBuilder.h:199
ExpressionBuilder::EBBinaryOpTermNode::MOD
Definition: ExpressionBuilder.h:212
ExpressionBuilder::EBBinaryOpTermNode::NOTEQ
Definition: ExpressionBuilder.h:219
ExpressionBuilder::EBBinaryTermNode::EBBinaryTermNode
EBBinaryTermNode(EBTermNode *left, EBTermNode *right)
Definition: ExpressionBuilder.h:188
ExpressionBuilder::EBBinaryOpTermNode::precedence
virtual int precedence() const
Definition: ExpressionBuilder.C:117
ExpressionBuilder::EBBinaryOpTermNode::MUL
Definition: ExpressionBuilder.h:210
ExpressionBuilder::EBBinaryOpTermNode::_type
NodeType _type
Definition: ExpressionBuilder.h:233
ExpressionBuilder::EBBinaryTermNode::_left
EBTermNode * _left
Definition: ExpressionBuilder.h:198
ExpressionBuilder::EBBinaryOpTermNode::GREATEREQ
Definition: ExpressionBuilder.h:217
ExpressionBuilder::EBBinaryOpTermNode::EQ
Definition: ExpressionBuilder.h:218
ExpressionBuilder::EBBinaryOpTermNode::DIV
Definition: ExpressionBuilder.h:211
ExpressionBuilder::EBBinaryOpTermNode::LESSEQ
Definition: ExpressionBuilder.h:216
ExpressionBuilder::EBBinaryOpTermNode::GREATER
Definition: ExpressionBuilder.h:215
ExpressionBuilder::EBTermNode::clone
virtual EBTermNode * clone() const =0
ExpressionBuilder::EBBinaryOpTermNode::ADD
Definition: ExpressionBuilder.h:208
ExpressionBuilder::EBBinaryOpTermNode::SUB
Definition: ExpressionBuilder.h:209
name
const std::string name
Definition: Setup.h:21
ExpressionBuilder::EBTermNode::substitute
virtual unsigned int substitute(const EBSubstitutionRuleList &)
Definition: ExpressionBuilder.h:69
ExpressionBuilder::EBTermNode::precedence
virtual int precedence() const =0
ExpressionBuilder::EBBinaryOpTermNode::LESS
Definition: ExpressionBuilder.h:214
ExpressionBuilder::EBBinaryOpTermNode::EBBinaryOpTermNode
EBBinaryOpTermNode(EBTermNode *left, EBTermNode *right, NodeType type)
Definition: ExpressionBuilder.h:222
ExpressionBuilder::EBBinaryOpTermNode::POW
Definition: ExpressionBuilder.h:213