From b42d75210b749455c3715a39593365216ede2696 Mon Sep 17 00:00:00 2001
From: Lucas Stratmann <lucas.stratmann@student.reutlingen-university.de>
Date: Tue, 15 Sep 2020 16:09:19 +0200
Subject: [PATCH] If,Else, While,For Working Vars In Progress
---
.../block/communication/SerialPrintBlock.java | 16 ++++++++
.../translator/block/control/ElseBlock.java | 16 ++++++--
.../translator/block/control/ElseIfBlock.java | 37 ++++++++++++++-----
.../translator/block/control/IfBlock.java | 18 +++++++--
.../translator/block/control/LoopBlock.java | 11 ++----
.../translator/block/control/RepeatBlock.java | 5 +++
.../block/control/RepeatTimesBlock.java | 24 ++++++++++++
.../translator/block/control/WhileBlock.java | 23 ++++++++++++
.../translator/block/numbers/FalseBlock.java | 6 +++
.../numbers/SetterVariableDigitalBlock.java | 6 +++
.../translator/block/numbers/StringBlock.java | 8 ++++
.../translator/block/numbers/TrueBlock.java | 7 ++++
.../block/numbers/VariableDigitalBlock.java | 13 +++++++
13 files changed, 165 insertions(+), 25 deletions(-)
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 99fde87..786385d 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 b5c867f..3ee3991 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 97ae3f7..dd8ab53 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 afe074c..b2e1e72 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 a32c136..c307cf6 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 23416ad..1b0a469 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 df84ffe..a5fe524 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 c3b71c5..e0feaef 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 e97c4aa..6ee30c3 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 4942c9c..7997196 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 4cf6c12..f8e4b25 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 269e617..512a4c5 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 5eb6f33..c18e4f3 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
+ }
}
--
GitLab