Skip to content
Snippets Groups Projects
Commit dd686d49 authored by olale's avatar olale
Browse files

Moved assignment code to clean repository

parents
No related branches found
No related tags found
No related merge requests found
Showing with 399 additions and 0 deletions
package visitor;
import java.text.MessageFormat;
public abstract class CompoundExpression extends AbstractExpression {
protected AbstractExpression leftOperand;
protected AbstractExpression rightOperand;
protected abstract String operator();
@Override
public String toString() {
String formatString = "{0} " + operator() + " {1}";
if (leftOperand instanceof CompoundExpression
|| rightOperand instanceof CompoundExpression) {
formatString = "({0}) " + operator() + " ({1})";
}
return MessageFormat.format(formatString, leftOperand, rightOperand);
}
}
package visitor;
public class CountingVariablesVisitor extends Visitor {
int count;
public int getCount() {
return count;
}
@Override
public void visit(Number exp) {
// TODO Auto-generated method stub
}
@Override
public void visit(Variable exp) {
count++;
}
@Override
public void visit(Sum exp) {
// TODO Auto-generated method stub
}
@Override
public void visit(Minus exp) {
// TODO Auto-generated method stub
}
}
package visitor;
public class EvaluationVisitor extends Visitor {
private int result;
public int getResult() {
return result;
}
@Override
public void visit(Number exp) {
result = exp.getValue();
}
@Override
public void visit(Variable exp) {
result = exp.getValue();
}
@Override
public void visit(Sum exp) {
// result = ??
}
@Override
public void visit(Minus exp) {
// result = ??
}
}
package visitor;
public class ExpressionTest {
public static void main(String[] args) {
AbstractExpression expression = new Sum(new Minus(new Number(1),
new Variable("x", 3)), new Sum(new Number(5), new Variable("y",
7)));
System.out.println(expression);
}
}
package visitor;
public class Minus extends CompoundExpression {
public Minus(AbstractExpression op1, AbstractExpression op2) {
this.leftOperand = op1;
this.rightOperand = op2;
}
@Override
protected String operator() {
return "-";
}
@Override
public void accept(Visitor v) {
v.visit(leftOperand);
v.visit(rightOperand);
v.visit(this);
}
}
package visitor;
public class Number extends SimpleExpression {
private int value;
public Number(int value) {
super();
this.value = value;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return new Integer(getValue()).toString();
}
@Override
public void accept(Visitor v) {
v.visit(this);
}
}
package visitor;
import java.text.MessageFormat;
public class PrintVisitor extends Visitor {
@Override
public void visit(Number exp) {
System.out.print(MessageFormat.format("{0} ", exp.getValue()));
}
@Override
public void visit(Variable exp) {
System.out.print(MessageFormat.format("{0} ", exp.getName()));
}
@Override
public void visit(Sum exp) {
System.out.print("+ ");
}
@Override
public void visit(Minus exp) {
System.out.print("- ");
}
}
package visitor;
public abstract class SimpleExpression extends AbstractExpression {
}
package visitor;
public class Sum extends CompoundExpression {
public Sum(AbstractExpression op1, AbstractExpression op2) {
this.leftOperand = op1;
this.rightOperand = op2;
}
@Override
protected String operator() {
return "+";
}
@Override
public void accept(Visitor v) {
leftOperand.accept(v);
rightOperand.accept(v);
v.visit(this);
}
}
package visitor;
public class Variable extends SimpleExpression {
private String name;
private int value;
public Variable(String name, int value) {
super();
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return getName();
}
@Override
public void accept(Visitor v) {
v.visit(this);
}
}
package visitor;
import java.text.MessageFormat;
public abstract class Visitor {
public abstract void visit(Number exp);
public abstract void visit(Variable exp);
public abstract void visit(Sum exp);
public abstract void visit(Minus exp);
public void visit(CompoundExpression compoundExpression) {
System.err.print(MessageFormat.format("Wrong type of expression: {0}", compoundExpression));
}
public void visit(AbstractExpression expr) {
System.err.print(MessageFormat.format("Wrong type of expression: {0}", expr));
}
}
package visitor;
public class VisitorTest {
public static void main(String[] args) {
// CountingVariablesVisitor v = new CountingVariablesVisitor();
AbstractExpression expression = new Sum(new Minus(new Number(1),
new Variable("x", 3)), new Sum(new Number(5), new Variable("y",
7)));
System.out.println(expression.toString());
// expression.accept(v);
// System.out.println(MessageFormat.format(
// "There were {0} variables in the expression", v.getCount()));
expression.accept(new PrintVisitor());
}
}
Task C/src/visitor/overview.png

62.2 KiB

<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.6" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true"
realizations="true" associations="true" dependencies="false" nesting-relationships="true">
<class id="1" language="java" name="visitor.SimpleExpression" project="Le7"
file="/Le7/src/visitor/SimpleExpression.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="296" y="286"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="visitor.AbstractExpression" project="Le7"
file="/Le7/src/visitor/AbstractExpression.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="305" y="100"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="visitor.Sum" project="Le7" file="/Le7/src/visitor/Sum.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="617" y="319"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="visitor.Number" project="Le7" file="/Le7/src/visitor/Number.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="257" y="460"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="visitor.Variable" project="Le7" file="/Le7/src/visitor/Variable.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="412" y="469"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="visitor.Minus" project="Le7" file="/Le7/src/visitor/Minus.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="839" y="475"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="visitor.CompoundExpression" project="Le7"
file="/Le7/src/visitor/CompoundExpression.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="740" y="149"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true"
visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<generalization id="8">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="7"/>
</generalization>
<generalization id="9">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="7"/>
</generalization>
<generalization id="10">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="1"/>
</generalization>
<generalization id="11">
<bendpoint x="545" y="92"/>
<end type="SOURCE" refId="7"/>
<end type="TARGET" refId="2"/>
</generalization>
<association id="12">
<bendpoint x="547" y="243"/>
<end type="SOURCE" refId="7" navigable="false">
<attribute id="13" name="leftOperand"/>
<multiplicity id="14" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="2" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="15">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="1"/>
</generalization>
<generalization id="16">
<end type="SOURCE" refId="1"/>
<end type="TARGET" refId="2"/>
</generalization>
<association id="17">
<end type="SOURCE" refId="7" navigable="false">
<attribute id="18" name="rightOperand"/>
<multiplicity id="19" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="2" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment