From a5227d99a4c612cdcb9794657cea8ceef37b97f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anian=20B=C3=BChler?= <anian.buehler@reutlingen-university.de> Date: Wed, 1 Feb 2023 12:46:30 +0100 Subject: [PATCH] Added CreatorVar-Block (implementation as to be done) --- .../numbers/CreatorVariableNumberBlock.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/com/ardublock/translator/block/numbers/CreatorVariableNumberBlock.java diff --git a/src/main/java/com/ardublock/translator/block/numbers/CreatorVariableNumberBlock.java b/src/main/java/com/ardublock/translator/block/numbers/CreatorVariableNumberBlock.java new file mode 100644 index 0000000..a155788 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/numbers/CreatorVariableNumberBlock.java @@ -0,0 +1,68 @@ +package com.ardublock.translator.block.numbers; + +import java.util.ResourceBundle; + +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.datatypes.SimTypeInt; +import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString; +import tec.letsgoing.ardublock.simulator.simcode.vars.CodeIntSet; + +public class CreatorVariableNumberBlock extends TranslatorBlock +{ + private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock"); + + public CreatorVariableNumberBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label){ + super(blockId, translator, codePrefix, codeSuffix, label); + } + + @Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String suffix = ""; + String newMarker = "_.new"; + String regex = "\\s*"+newMarker+"\\b\\s*"; + String dataType = "int"; + String stdInitVal= "0"; + + TranslatorBlock tb_Name = this.getRequiredTranslatorBlockAtSocket(0); + String variableName = tb_Name.toCode(); + TranslatorBlock tb_Value = this.getTranslatorBlockAtSocket(1); + String value = tb_Value.toCode().replaceAll(regex, ""); + + if (!(tb_Name instanceof VariableNumberBlock)){// && !(tb_Name instanceof ConstantNumberBlock)) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.number_var_slot")); + } + + else { + variableName = variableName.replaceAll(regex, ""); + translator.addNumberVariable(variableName, variableName); //remove the "new" Tag after declaration + if(tb_Value instanceof NumberBlock){ + return dataType + " " + variableName + " = "+ value + suffix +";"; + }else{ + return dataType + " " + variableName + " = " + stdInitVal + ";"; + } + } + } + + /* TODO: ADD local Var handling to simulator + */ + /* + public SimCode toSim() throws SocketNullException { + TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0); + SimTypeString variableName = new SimTypeString(translatorBlock.toString()); + if (translatorBlock instanceof VariableNumberBlock) { + translator.addNumberSim(translatorBlock.toString(), translatorBlock.toString()); + } + translatorBlock = this.getRequiredTranslatorBlockAtSocket(1); + SimTypeInt value = new SimTypeInt(translatorBlock.toSim()); + + return new CodeIntSet(variableName,value); + } + */ +} -- GitLab