Skip to content

Method: interpret(CommunicationManager)

1: package pruefskript.parser.nodes;
2:
3: import basic.PruefskriptConstants;
4: import pruefskript.CommunicationManager;
5: import pruefskript.parser.exceptions.CheckScriptException;
6: import pruefskript.parser.exceptions.WrongNodeException;
7: import pruefskript.parser.values.AbstractReturnValue;
8: import pruefskript.parser.values.NumericValue;
9:
10: /**
11: * DivNode.
12: *
13: * @author Phil
14: *
15: */
16:
17: public class DivNode extends AbstractBinaryOperationNode {
18:
19:         /**
20:          * DivNode.
21:          *
22:          * @param operand1
23:          * AbstractNode
24:          * @param operand2
25:          * AbstractNode
26:          */
27:         public DivNode(final AbstractNode operand1, final AbstractNode operand2) {
28:                 super(operand1, operand2);
29:         }
30:
31:         @Override
32:         public String toString() {
33:                 return PruefskriptConstants.DIVNODETITLE + PruefskriptConstants.BRACKET_OPEN
34:                                 + super.toString() + PruefskriptConstants.BRACKET_CLOSE;
35:         }
36:
37:         @Override
38:         public boolean equals(final Object obj) {
39:                 return super.equals(obj) && obj instanceof DivNode;
40:
41:         }
42:
43:         @Override
44:         public int hashCode() {
45:                 return super.hashCode() + PruefskriptConstants.DIVNODE_HASHCODE;
46:         }
47:
48:         /**
49:          * Die Operanten 1 und 2 werden jeweils durch den Aufruf der interpret-Methode ausgewertet.
50:          * Handelt es sich in beiden Faellen um numerische Werte, wird der numerische Wert von operand1
51:          * durch den von operand2 geteilt und das Ergebnis wird zurueckgeliefert. Im anderen Fall wird
52:          * eine Exception geworfen.
53:          */
54:         @Override
55:         public NumericValue interpret(final CommunicationManager mgr) throws CheckScriptException {
56:                 final AbstractReturnValue op1 = this.getOperand1().interpret(mgr);
57:                 final AbstractReturnValue op2 = this.getOperand2().interpret(mgr);
58:•                if (op1.isNumericValue() && op2.isNumericValue()) {
59:                         return new NumericValue(
60:                                         op1.toNumericValue().getValue() / op2.toNumericValue().getValue());
61:                 } else {
62:                         throw new WrongNodeException(PruefskriptConstants.UNEXPECTED_NUM_OPERATION);
63:                 }
64:
65:         }
66: }