diff options
Diffstat (limited to 'Master/Software Architektur/SWA_Prakt3/src')
13 files changed, 197 insertions, 0 deletions
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticAddition.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticAddition.java new file mode 100755 index 0000000..efbf899 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticAddition.java @@ -0,0 +1,14 @@ +package swa.prakt3;
+
+public class ArithmeticAddition extends ArithmeticOperation {
+
+ public ArithmeticAddition(ArithmeticExpression operand1,
+ ArithmeticExpression operand2) {
+ super(operand1, operand2);
+ operationSign="+";
+ }
+ @Override
+ public Number doOperation(Number op1, Number op2) {
+ return op1.doubleValue() + op2.doubleValue() ;
+ }
+}
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticDivision.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticDivision.java new file mode 100755 index 0000000..d8431a8 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticDivision.java @@ -0,0 +1,14 @@ +package swa.prakt3;
+
+public class ArithmeticDivision extends ArithmeticOperation {
+
+ public ArithmeticDivision(ArithmeticExpression operand1,
+ ArithmeticExpression operand2) {
+ super(operand1, operand2);
+ operationSign="/";
+ }
+ @Override
+ public Number doOperation(Number op1, Number op2) {
+ return op1.doubleValue() / op2.doubleValue() ;
+ }
+}
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticExpression.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticExpression.java new file mode 100755 index 0000000..10ac058 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticExpression.java @@ -0,0 +1,7 @@ +package swa.prakt3;
+
+public abstract class ArithmeticExpression {
+ public ExprType type;
+ protected Visitor v;
+ public abstract Number accept(Visitor v, Iterator it);
+}
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticMultiplication.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticMultiplication.java new file mode 100755 index 0000000..abc833a --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticMultiplication.java @@ -0,0 +1,16 @@ +package swa.prakt3;
+
+public class ArithmeticMultiplication extends ArithmeticOperation {
+
+
+
+ public ArithmeticMultiplication(ArithmeticExpression operand1,
+ ArithmeticExpression operand2) {
+ super(operand1, operand2);
+ operationSign = "*";
+ }
+ @Override
+ public Number doOperation(Number op1, Number op2) {
+ return op1.doubleValue() * op2.doubleValue() ;
+ }
+}
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticOperation.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticOperation.java new file mode 100755 index 0000000..fca2f9a --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticOperation.java @@ -0,0 +1,28 @@ +package swa.prakt3;
+
+public abstract class ArithmeticOperation extends ArithmeticExpression{
+ protected ArithmeticExpression operand1;
+ protected ArithmeticExpression operand2;
+ protected String operationSign;
+ public ArithmeticOperation(ArithmeticExpression operand1
+ ,ArithmeticExpression operand2){
+ this.operand1 = operand1;
+ this.operand2 = operand2;
+ this.type = ExprType.OPER;
+ }
+ public String getOperationSign() {
+ return operationSign;
+ }
+ public ArithmeticExpression getLeftOperand() {
+ return operand1;
+ }
+ public ArithmeticExpression getRightOperand() {
+ return operand2;
+ }
+ @Override
+ public Number accept(Visitor v, Iterator it) {
+ this.v = v;
+ return v.visit(this, it);
+ }
+ public abstract Number doOperation(Number op1, Number op2);
+}
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticSubstraction.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticSubstraction.java new file mode 100755 index 0000000..ebb94a7 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticSubstraction.java @@ -0,0 +1,14 @@ +package swa.prakt3;
+
+public class ArithmeticSubstraction extends ArithmeticOperation {
+
+ public ArithmeticSubstraction(ArithmeticExpression operand1,
+ ArithmeticExpression operand2) {
+ super(operand1, operand2);
+ operationSign = "-";
+ }
+ @Override
+ public Number doOperation(Number op1, Number op2) {
+ return op1.doubleValue() - op2.doubleValue() ;
+ }
+}
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticVariable.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticVariable.java new file mode 100755 index 0000000..943e7de --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticVariable.java @@ -0,0 +1,24 @@ +package swa.prakt3;
+
+public class ArithmeticVariable extends ArithmeticExpression {
+ private String name;
+ private Number value;
+
+ public ArithmeticVariable(String name,Number value) {
+ this.name = name;
+ this.value = value;
+ this.type = ExprType.VAR;
+ }
+
+ public String getName() {
+ return name;
+ }
+ public Number getValue() {
+ return value;
+ }
+ @Override
+ public Number accept(Visitor v, Iterator it) {
+ this.v=v;
+ return v.visit(this);
+ }
+}
diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/EvalVisitor.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/EvalVisitor.java new file mode 100644 index 0000000..21b2f67 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/EvalVisitor.java @@ -0,0 +1,15 @@ +package swa.prakt3; + +public class EvalVisitor implements Visitor { + @Override + public Number visit(ArithmeticOperation ao, Iterator it) { + Number leftRes = it.traverse(ao.getLeftOperand(), this); + Number rightRes = it.traverse(ao.getRightOperand(), this); + return ao.doOperation(leftRes, rightRes); + } + + @Override + public Number visit(ArithmeticVariable av) { + return av.getValue(); + } +} diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ExprType.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ExprType.java new file mode 100644 index 0000000..1a5f106 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ExprType.java @@ -0,0 +1,5 @@ +package swa.prakt3; + +public enum ExprType { + VAR,OPER +} diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Iterator.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Iterator.java new file mode 100644 index 0000000..4b333ad --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Iterator.java @@ -0,0 +1,7 @@ +package swa.prakt3; + +public class Iterator { + public Number traverse(ArithmeticExpression ae,Visitor vis) { + return ae.accept(vis,this); + } +} diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Main.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Main.java new file mode 100644 index 0000000..919baaa --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Main.java @@ -0,0 +1,26 @@ +package swa.prakt3; + +public class Main { + + public static void main(String[] args) { + ArithmeticVariable a = new ArithmeticVariable("a", 2); + ArithmeticVariable b = new ArithmeticVariable("b", 77); + ArithmeticVariable c = new ArithmeticVariable("c", 0.1); + ArithmeticVariable d = new ArithmeticVariable("d", 0.00003); + + ArithmeticExpression aAddb = new ArithmeticAddition(a,b); + ArithmeticExpression aSubc = new ArithmeticSubstraction(a,c); + ArithmeticExpression bMuld = new ArithmeticMultiplication(b, d); + + ArithmeticExpression ae1 = new ArithmeticMultiplication(aAddb, aSubc); + ArithmeticExpression ae2 = new ArithmeticSubstraction(bMuld, a); + + ArithmeticExpression root = new ArithmeticAddition(ae1, ae2); + + Iterator iter = new Iterator(); + iter.traverse(root, new PrintVisitor()); + System.out.println(); + System.out.println(iter.traverse(root, new EvalVisitor())); + } + +} diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/PrintVisitor.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/PrintVisitor.java new file mode 100644 index 0000000..fd45b88 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/PrintVisitor.java @@ -0,0 +1,21 @@ +package swa.prakt3; + + + +public class PrintVisitor implements Visitor { + @Override + public Number visit(ArithmeticOperation ao, Iterator it) { + System.out.print("("); + it.traverse(ao.getLeftOperand(), this); + System.out.print(ao.getOperationSign()); + it.traverse(ao.getRightOperand(), this); + System.out.print(")"); + return null; + } + + @Override + public Number visit(ArithmeticVariable av) { + System.out.print(av.getName()); + return null; + } +} diff --git a/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Visitor.java b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Visitor.java new file mode 100644 index 0000000..995e554 --- /dev/null +++ b/Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Visitor.java @@ -0,0 +1,6 @@ +package swa.prakt3; + +public interface Visitor { + public Number visit(ArithmeticOperation ao, Iterator it); + public Number visit(ArithmeticVariable av); +} |
