diff --git a/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java b/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java index 99fde878d7f3c28c65997dc22f58516e1a90bbac..786385d017f5944f8a67d3dd7f736aaa816df429 100644 --- a/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java @@ -2,9 +2,15 @@ package com.ardublock.translator.block.communication; import com.ardublock.translator.Translator; import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.comm.CodeSerialPrint; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString; + public class SerialPrintBlock extends TranslatorBlock { public SerialPrintBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) @@ -43,4 +49,14 @@ public class SerialPrintBlock extends TranslatorBlock return ret; } + + public SimCode toSim() throws BlockException, SocketNullException { + TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0); //Code + SimTypeString data=new SimTypeString(translatorBlock.toSim()); + translatorBlock = this.getRequiredTranslatorBlockAtSocket(1); //newLine? + SimTypeBool newLine= new SimTypeBool(translatorBlock.toSim()); + + return new CodeSerialPrint(data,newLine); + } + } diff --git a/src/main/java/com/ardublock/translator/block/control/ElseBlock.java b/src/main/java/com/ardublock/translator/block/control/ElseBlock.java index b5c867ffce9f103139fa41761cb8b0b9bb286c14..3ee39915cb9b90bd0c9685250be9b9ffcbbbb098 100644 --- a/src/main/java/com/ardublock/translator/block/control/ElseBlock.java +++ b/src/main/java/com/ardublock/translator/block/control/ElseBlock.java @@ -12,6 +12,7 @@ import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse; import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf; import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf; public class ElseBlock extends TranslatorBlock { @@ -33,18 +34,25 @@ public class ElseBlock extends TranslatorBlock ret = ret + "}\n"; return ret; } - @Override - public SimCode toSim() throws BlockException, SocketNullException { - //FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?. + + public SimTypeIf toIfSim() throws BlockException, SocketNullException { + Vector<SimCode> vector = new Vector<SimCode>(); TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0); while (translatorBlock != null) { - vector.add(translatorBlock.toSim()); + if (translatorBlock.toSim()!=null) { + vector.add(translatorBlock.toSim()); + } translatorBlock = translatorBlock.nextTranslatorBlock(); } + return new CodeElse(vector); } + + public SimCode toSim() { + return null; + } } diff --git a/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java b/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java index 97ae3f76a0ce368b89c33fcb0e941b222c24d1ac..dd8ab538cc4117a902c74c37809e0da9de1b5a74 100644 --- a/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java +++ b/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java @@ -12,6 +12,7 @@ import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf; import tec.letsgoing.ardublock.simulator.simcode.control.CodeIf; import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf; public class ElseIfBlock extends TranslatorBlock { @@ -39,16 +40,32 @@ public class ElseIfBlock extends TranslatorBlock @Override public SimCode toSim() throws BlockException, SocketNullException { - //FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?. - SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim()); - Vector<SimCode> vector = new Vector<SimCode>(); - TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1); - while (translatorBlock != null) - { - vector.add(translatorBlock.toSim()); - translatorBlock = translatorBlock.nextTranslatorBlock(); - } + return null; + } + + public SimTypeIf toIfSim() throws BlockException, SocketNullException { - return new CodeElseIf(condition,vector); + SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim()); + Vector<SimCode> vector = new Vector<SimCode>(); + TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1); + while (translatorBlock != null) + { + if (translatorBlock.toSim()!=null) { + vector.add(translatorBlock.toSim()); + } + translatorBlock = translatorBlock.nextTranslatorBlock(); + } + SimTypeIf followCode=null; + TranslatorBlock followBlock=this.nextTranslatorBlock(); + if (followBlock instanceof ElseIfBlock) { + followCode=((ElseIfBlock)followBlock).toIfSim(); + } else if (followBlock instanceof ElseBlock) { + followCode=((ElseBlock)followBlock).toIfSim(); + + } + + + return new CodeElseIf(followCode,condition,vector); } + } diff --git a/src/main/java/com/ardublock/translator/block/control/IfBlock.java b/src/main/java/com/ardublock/translator/block/control/IfBlock.java index afe074c082863210f0d995f162ee9595dad67a26..b2e1e72e0b0fd7d831fbf567d275ed107612e7c5 100644 --- a/src/main/java/com/ardublock/translator/block/control/IfBlock.java +++ b/src/main/java/com/ardublock/translator/block/control/IfBlock.java @@ -9,8 +9,11 @@ import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse; +import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf; import tec.letsgoing.ardublock.simulator.simcode.control.CodeIf; import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf; public class IfBlock extends TranslatorBlock @@ -39,17 +42,26 @@ public class IfBlock extends TranslatorBlock @Override public SimCode toSim() throws BlockException, SocketNullException { - //FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?. SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim()); Vector<SimCode> vector = new Vector<SimCode>(); TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1); while (translatorBlock != null) { + if (translatorBlock.toSim()!=null) { vector.add(translatorBlock.toSim()); + } translatorBlock = translatorBlock.nextTranslatorBlock(); } - - return new CodeIf(condition,vector); + SimTypeIf followCode=null; + TranslatorBlock followBlock=this.nextTranslatorBlock(); + if (followBlock instanceof ElseIfBlock) { + followCode=((ElseIfBlock)followBlock).toIfSim(); + } else if (followBlock instanceof ElseBlock) { + followCode=((ElseBlock)followBlock).toIfSim(); + + } + + return new CodeIf(followCode,condition,vector); } diff --git a/src/main/java/com/ardublock/translator/block/control/LoopBlock.java b/src/main/java/com/ardublock/translator/block/control/LoopBlock.java index a32c136503b53b666b24f5c8d73d35feddd9524e..c307cf6bf1e4556224be27d9aff73d28a979c570 100644 --- a/src/main/java/com/ardublock/translator/block/control/LoopBlock.java +++ b/src/main/java/com/ardublock/translator/block/control/LoopBlock.java @@ -42,20 +42,15 @@ public class LoopBlock extends TranslatorBlock public SimCode toSim() throws BlockException, SocketNullException { Vector<SimCode> vec =new Vector<SimCode>(); TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0); - SimCode prevSimCode=null; while (translatorBlock != null) { SimCode newSimCode = translatorBlock.toSim(); - translatorBlock = translatorBlock.nextTranslatorBlock(); - if (newSimCode instanceof CodeElseIf || newSimCode instanceof CodeElse) { - ((SimTypeIf)prevSimCode).setFollowBlock((SimTypeIf) newSimCode); - } else { + if (newSimCode != null) { vec.add(newSimCode); } - if (newSimCode instanceof SimTypeIf) { - prevSimCode=newSimCode; - } + + } SimCodeFunction loop =new SimCodeFunction("loop",vec); return loop; diff --git a/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java b/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java index 23416ad483f2fe0eef6b1299c7a2faa104a44d89..1b0a469effcc59342b1f2bbe0a47bb0c3bddbfa6 100644 --- a/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java +++ b/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java @@ -11,6 +11,9 @@ import com.ardublock.translator.block.numbers.LocalVariableNumberBlock; import com.ardublock.translator.block.numbers.NumberBlock; import com.ardublock.translator.block.numbers.VariableNumberBlock; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile; + public class RepeatBlock extends TranslatorBlock { @@ -78,5 +81,7 @@ public class RepeatBlock extends TranslatorBlock ret = ret + "}\n"; return ret; } + + } diff --git a/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java b/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java index df84ffe7b62cdb4c8ba4344b4e05437aaed079ee..a5fe5244ada8a0aaf03213c398ee34f9cdb5d403 100644 --- a/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java +++ b/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java @@ -1,10 +1,17 @@ package com.ardublock.translator.block.control; +import java.util.Vector; + import com.ardublock.translator.Translator; import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.control.CodeFor; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt; + public class RepeatTimesBlock extends TranslatorBlock { @@ -32,5 +39,22 @@ public class RepeatTimesBlock extends TranslatorBlock ret = ret + "}\n"; return ret; } + + public SimCode toSim() throws BlockException, SocketNullException { + TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0); + SimTypeInt times=new SimTypeInt(translatorBlock.toSim()); + translatorBlock = getTranslatorBlockAtSocket(1); + Vector<SimCode> vector= new Vector<SimCode>(); + while (translatorBlock != null) + { + SimCode block=translatorBlock.toSim(); + if (block!=null) { + vector.add(block); + } + translatorBlock = translatorBlock.nextTranslatorBlock(); + } + + return new CodeFor(times,vector); + } } diff --git a/src/main/java/com/ardublock/translator/block/control/WhileBlock.java b/src/main/java/com/ardublock/translator/block/control/WhileBlock.java index c3b71c59a8e25423c22836b72956ab984dc490f5..e0feaefaa24a58a4611c518c67cbdb224b1e56d8 100644 --- a/src/main/java/com/ardublock/translator/block/control/WhileBlock.java +++ b/src/main/java/com/ardublock/translator/block/control/WhileBlock.java @@ -1,10 +1,17 @@ package com.ardublock.translator.block.control; +import java.util.Vector; + import com.ardublock.translator.Translator; import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; + public class WhileBlock extends TranslatorBlock { @@ -29,5 +36,21 @@ public class WhileBlock extends TranslatorBlock ret = ret + "}\n"; return ret; } + + public SimCode toSim() throws BlockException, SocketNullException { + TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0); + SimTypeBool condition=new SimTypeBool(translatorBlock.toSim()); + translatorBlock = getTranslatorBlockAtSocket(1); + Vector<SimCode> vector= new Vector<SimCode>(); + while (translatorBlock != null) + { + SimCode block=translatorBlock.toSim(); + if (block!=null) { + vector.add(block); + } + translatorBlock = translatorBlock.nextTranslatorBlock(); + } + return new CodeWhile(condition,vector); + } } diff --git a/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java b/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java index e97c4aae2661a4d6e2b1c44a54d31dd8659c5e80..6ee30c30a01202492c785d46dcc3c5708809f478 100644 --- a/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java +++ b/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java @@ -3,6 +3,9 @@ package com.ardublock.translator.block.numbers; import com.ardublock.translator.Translator; import com.ardublock.translator.block.ConstBlock; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; + public class FalseBlock extends ConstBlock { public FalseBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) @@ -10,4 +13,7 @@ public class FalseBlock extends ConstBlock super(blockId, translator, codePrefix, codeSuffix, label); this.setCode("false"); } + public SimCode toSim() { + return new SimTypeBool(false); + } } diff --git a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java index 4942c9cb5191feb81efb1b9f658e0ffb5c544f9b..79971962cb9887fead5d5b77e21ef2fb58d0e325 100644 --- a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java +++ b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java @@ -8,6 +8,8 @@ import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; + public class SetterVariableDigitalBlock extends TranslatorBlock { private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock"); @@ -70,5 +72,9 @@ public class SetterVariableDigitalBlock extends TranslatorBlock return variableName + " = " + value + suffix + ";\n"; } + public SimCode toSim() { + + return null; + } } diff --git a/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java b/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java index 4cf6c122b3328e6fab653ecd020d04dc85070306..f8e4b25fa023e63400dfe0bc5eba1540a9b73014 100644 --- a/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java +++ b/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java @@ -5,6 +5,10 @@ import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString; + public class StringBlock extends TranslatorBlock { public StringBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) @@ -32,4 +36,8 @@ public class StringBlock extends TranslatorBlock return codePrefix + "\"" + label + "\"" + codeSuffix; } + + public SimCode toSim() { + return new SimTypeString(label); + } } \ No newline at end of file diff --git a/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java b/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java index 269e6176925667b8ac5d4d806ac54c836460833a..512a4c57703a3ff2e3278c4e48406f1189ac4f8f 100644 --- a/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java +++ b/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java @@ -3,6 +3,9 @@ package com.ardublock.translator.block.numbers; import com.ardublock.translator.Translator; import com.ardublock.translator.block.ConstBlock; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool; + public class TrueBlock extends ConstBlock { public TrueBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) @@ -10,4 +13,8 @@ public class TrueBlock extends ConstBlock super(blockId, translator, codePrefix, codeSuffix, label); this.setCode("true"); } + + public SimCode toSim() { + return new SimTypeBool(true); + } } diff --git a/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java b/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java index 5eb6f33f203a1e2e0bdd640815f730dd3b9991a1..c18e4f33acafc40bdffd941b57f9758371bd5cd9 100644 --- a/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java +++ b/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java @@ -3,6 +3,10 @@ package com.ardublock.translator.block.numbers; import com.ardublock.translator.Translator; import com.ardublock.translator.block.TranslatorBlock; +import tec.letsgoing.ardublock.simulator.simcode.SimCode; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString; +import tec.letsgoing.ardublock.simulator.simcode.vars.CodeBoolGet; + public class VariableDigitalBlock extends TranslatorBlock { public VariableDigitalBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) @@ -26,4 +30,13 @@ public class VariableDigitalBlock extends TranslatorBlock return codePrefix + newInternalName + codeSuffix; } + + public String toString() { + return label; + } + + public SimCode toSim() { + return new CodeBoolGet(new SimTypeString(label)); + //FIXME Setter has to decide if it is new. Add here to Label and Setter makes set or + } }