From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../src/swa/prakt3/ArithmeticAddition.java | 14 +++++++++++ .../src/swa/prakt3/ArithmeticDivision.java | 14 +++++++++++ .../src/swa/prakt3/ArithmeticExpression.java | 7 ++++++ .../src/swa/prakt3/ArithmeticMultiplication.java | 16 +++++++++++++ .../src/swa/prakt3/ArithmeticOperation.java | 28 ++++++++++++++++++++++ .../src/swa/prakt3/ArithmeticSubstraction.java | 14 +++++++++++ .../src/swa/prakt3/ArithmeticVariable.java | 24 +++++++++++++++++++ .../SWA_Prakt3/src/swa/prakt3/EvalVisitor.java | 15 ++++++++++++ .../SWA_Prakt3/src/swa/prakt3/ExprType.java | 5 ++++ .../SWA_Prakt3/src/swa/prakt3/Iterator.java | 7 ++++++ .../SWA_Prakt3/src/swa/prakt3/Main.java | 26 ++++++++++++++++++++ .../SWA_Prakt3/src/swa/prakt3/PrintVisitor.java | 21 ++++++++++++++++ .../SWA_Prakt3/src/swa/prakt3/Visitor.java | 6 +++++ 13 files changed, 197 insertions(+) create mode 100755 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticAddition.java create mode 100755 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticDivision.java create mode 100755 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticExpression.java create mode 100755 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticMultiplication.java create mode 100755 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticOperation.java create mode 100755 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticSubstraction.java create mode 100755 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ArithmeticVariable.java create mode 100644 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/EvalVisitor.java create mode 100644 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/ExprType.java create mode 100644 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Iterator.java create mode 100644 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Main.java create mode 100644 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/PrintVisitor.java create mode 100644 Master/Software Architektur/SWA_Prakt3/src/swa/prakt3/Visitor.java (limited to 'Master/Software Architektur/SWA_Prakt3/src/swa/prakt3') 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); +} -- cgit v1.2.3