From 48659c28bf6a6fbcff2c8e67247680afaa023de9 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Sat, 25 Dec 2021 14:22:32 +0100 Subject: Turns Wyrd's computation into the instruction. --- .../v1/computation/generic/OperationCompiler.java | 11 ++-- .../tonkadur/wyrd/v1/compiler/util/Shuffle.java | 6 +- .../wyrd/v1/lang/computation/Operation.java | 10 --- .../wyrd/v1/lang/instruction/SetRandom.java | 72 ++++++++++++++++++++++ .../wyrd/v1/lang/meta/InstructionVisitor.java | 9 ++- .../tonkadur/jsonexport/InstructionCompiler.java | 22 +++++++ 6 files changed, 111 insertions(+), 19 deletions(-) create mode 100644 src/core/src/tonkadur/wyrd/v1/lang/instruction/SetRandom.java diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/OperationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/OperationCompiler.java index 3f98979..216fc2b 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/OperationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/OperationCompiler.java @@ -15,6 +15,7 @@ import tonkadur.wyrd.v1.lang.computation.ValueOf; import tonkadur.wyrd.v1.lang.computation.RelativeAddress; import tonkadur.wyrd.v1.lang.instruction.SetValue; +import tonkadur.wyrd.v1.lang.instruction.SetRandom; import tonkadur.wyrd.v1.lang.meta.Computation; import tonkadur.wyrd.v1.lang.meta.Instruction; @@ -337,10 +338,11 @@ public class OperationCompiler extends GenericComputationCompiler push_rand.add ( - new SetValue + new SetRandom ( result_as_address, - Operation.rand(operands.get(0), operands.get(1)) + operands.get(0), + operands.get(1) ) ); @@ -412,10 +414,11 @@ public class OperationCompiler extends GenericComputationCompiler compiler.registers().get_rand_mode_holder().get_value(), Constant.ZERO ), - new SetValue + new SetRandom ( result_as_address, - Operation.rand(operands.get(0), operands.get(1)) + operands.get(0), + operands.get(1) ), tonkadur.wyrd.v1.compiler.util.IfElse.generate ( diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/Shuffle.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/Shuffle.java index 45dbd81..5d39275 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/Shuffle.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/Shuffle.java @@ -19,6 +19,7 @@ import tonkadur.wyrd.v1.lang.computation.ValueOf; import tonkadur.wyrd.v1.lang.computation.Size; import tonkadur.wyrd.v1.lang.instruction.SetValue; +import tonkadur.wyrd.v1.lang.instruction.SetRandom; import tonkadur.wyrd.v1.compiler.util.registers.RegisterManager; @@ -69,10 +70,11 @@ public class Shuffle while_body.add ( - new SetValue + new SetRandom ( target_index.get_address(), - Operation.rand(Constant.ZERO, iterator.get_value()) + Constant.ZERO, + iterator.get_value() ) ); diff --git a/src/core/src/tonkadur/wyrd/v1/lang/computation/Operation.java b/src/core/src/tonkadur/wyrd/v1/lang/computation/Operation.java index 93d005f..40ed37f 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/computation/Operation.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/computation/Operation.java @@ -15,7 +15,6 @@ public class Operation extends Computation public static final String MODULO = "modulo"; public static final String PLUS = "plus"; public static final String POWER = "power"; - public static final String RAND = "rand"; public static final String TIMES = "times"; /* Logic operations ********************************************************/ @@ -80,15 +79,6 @@ public class Operation extends Computation return new Operation(POWER, param_a.get_type(), param_a, param_b); } - public static Operation rand - ( - final Computation param_a, - final Computation param_b - ) - { - return new Operation(RAND, Type.INT, param_a, param_b); - } - /* Logic operations ********************************************************/ public static Operation and ( diff --git a/src/core/src/tonkadur/wyrd/v1/lang/instruction/SetRandom.java b/src/core/src/tonkadur/wyrd/v1/lang/instruction/SetRandom.java new file mode 100644 index 0000000..27cbe79 --- /dev/null +++ b/src/core/src/tonkadur/wyrd/v1/lang/instruction/SetRandom.java @@ -0,0 +1,72 @@ +package tonkadur.wyrd.v1.lang.instruction; + +import tonkadur.wyrd.v1.lang.meta.Computation; +import tonkadur.wyrd.v1.lang.meta.Instruction; +import tonkadur.wyrd.v1.lang.meta.InstructionVisitor; + +public class SetRandom extends Instruction +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final Computation target; + protected final Computation min, max; + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + public SetRandom + ( + final Computation target, + final Computation min, + final Computation max + ) + { + this.target = target; + this.min = min; + this.max = max; + } + + /**** Accessors ************************************************************/ + public Computation get_target () + { + return target; + } + + public Computation get_min () + { + return min; + } + + public Computation get_max () + { + return max; + } + + @Override + public void get_visited_by (final InstructionVisitor iv) + throws Throwable + { + iv.visit_set_random(this); + } + + /**** Misc. ****************************************************************/ + @Override + public String toString () + { + final StringBuilder sb; + + sb = new StringBuilder(); + + sb.append("(SetRandom "); + sb.append(target.toString()); + sb.append(" "); + sb.append(min.toString()); + sb.append(" "); + sb.append(max.toString()); + sb.append(")"); + + return sb.toString(); + } +} diff --git a/src/core/src/tonkadur/wyrd/v1/lang/meta/InstructionVisitor.java b/src/core/src/tonkadur/wyrd/v1/lang/meta/InstructionVisitor.java index 065037f..0338625 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/meta/InstructionVisitor.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/meta/InstructionVisitor.java @@ -31,6 +31,12 @@ public interface InstructionVisitor public void visit_set_pc (final SetPC n) throws Throwable; + public void visit_set_random (final SetRandom n) + throws Throwable; + + public void visit_set_value (final SetValue n) + throws Throwable; + public void visit_prompt_command (final PromptCommand n) throws Throwable; @@ -40,9 +46,6 @@ public interface InstructionVisitor public void visit_prompt_string (final PromptString n) throws Throwable; - public void visit_set_value (final SetValue n) - throws Throwable; - public void visit_initialize (final Initialize n) throws Throwable; } diff --git a/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java b/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java index c23b5b1..79cb4ea 100644 --- a/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java +++ b/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java @@ -156,6 +156,27 @@ public class InstructionCompiler implements InstructionVisitor result.put("value", cc.get_result()); } + public void visit_set_random (final SetRandom n) + throws Throwable + { + final ComputationCompiler target_cc, min_cc, max_cc; + + target_cc = new ComputationCompiler(); + min_cc = new ComputationCompiler(); + max_cc = new ComputationCompiler(); + + n.get_target().get_visited_by(target_cc); + n.get_min().get_visited_by(min_cc); + n.get_max().get_visited_by(max_cc); + + result = new JSONObject(); + + result.put("category", "set_random"); + result.put("target", target_cc.get_result()); + result.put("min", min_cc.get_result()); + result.put("max", max_cc.get_result()); + } + public void visit_set_value (final SetValue n) throws Throwable { @@ -214,6 +235,7 @@ public class InstructionCompiler implements InstructionVisitor result.put("label", label_cc.get_result()); } + public void visit_prompt_integer (final PromptInteger n) throws Throwable { -- cgit v1.2.3-70-g09d2