summaryrefslogtreecommitdiffstats
path: root/Master/Software Architektur/SWA_Prakt3/src/swa
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Master/Software Architektur/SWA_Prakt3/src/swa
downloadStudium-master.tar.gz
Studium-master.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Master/Software Architektur/SWA_Prakt3/src/swa')
-rwxr-xr-xMaster/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticAddition.java14
-rwxr-xr-xMaster/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticDivision.java14
-rwxr-xr-xMaster/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticExpression.java7
-rwxr-xr-xMaster/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticMultiplication.java16
-rwxr-xr-xMaster/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticOperation.java28
-rwxr-xr-xMaster/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticSubstraction.java14
-rwxr-xr-xMaster/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticVariable.java24
-rw-r--r--Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/EvalVisitor.java15
-rw-r--r--Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ExprType.java5
-rw-r--r--Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Iterator.java7
-rw-r--r--Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Main.java26
-rw-r--r--Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/PrintVisitor.java21
-rw-r--r--Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Visitor.java6
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);
+}