Skip to content
Snippets Groups Projects
Commit d040086b authored by Lucas Stratmann's avatar Lucas Stratmann
Browse files

All Controlblocks and Functions working

parent 12d21189
No related branches found
No related tags found
No related merge requests found
Showing
with 163 additions and 26 deletions
...@@ -20,6 +20,7 @@ import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; ...@@ -20,6 +20,7 @@ import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import edu.mit.blocks.codeblocks.Block; import edu.mit.blocks.codeblocks.Block;
import edu.mit.blocks.renderable.RenderableBlock; import edu.mit.blocks.renderable.RenderableBlock;
import edu.mit.blocks.workspace.Workspace; import edu.mit.blocks.workspace.Workspace;
import tec.letsgoing.ardublock.simulator.Simulator;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
public class Translator public class Translator
...@@ -40,7 +41,6 @@ public class Translator ...@@ -40,7 +41,6 @@ public class Translator
private Map<String, String> booleanVariableSet; private Map<String, String> booleanVariableSet;
private Map<String, String> stringVariableSet; private Map<String, String> stringVariableSet;
private Map<String, Object> internalData; private Map<String, Object> internalData;
private Workspace workspace; private Workspace workspace;
private String rootBlockName; private String rootBlockName;
...@@ -136,12 +136,13 @@ public class Translator ...@@ -136,12 +136,13 @@ public class Translator
//added by letsoING -> simulator //added by letsoING -> simulator
//TODO check if it works as expected ;-P //TODO check if it works as expected ;-P
//-> only changed rootTranslatorBlock.toCode to .toSim from translate //-> only changed rootTranslatorBlock.toCode to .toSim from translate
public SimCode simulate(Long blockId) throws SocketNullException, SubroutineNotDeclaredException, BlockException public SimCode simulate(Long blockId,Simulator sim) throws SocketNullException, SubroutineNotDeclaredException, BlockException
{ {
TranslatorBlockFactory translatorBlockFactory = new TranslatorBlockFactory(); TranslatorBlockFactory translatorBlockFactory = new TranslatorBlockFactory();
Block block = workspace.getEnv().getBlock(blockId); Block block = workspace.getEnv().getBlock(blockId);
TranslatorBlock rootTranslatorBlock = translatorBlockFactory.buildTranslatorBlock(this, blockId, block.getGenusName(), "", "", block.getBlockLabel()); TranslatorBlock rootTranslatorBlock = translatorBlockFactory.buildTranslatorBlock(this, blockId, block.getGenusName(), "", "", block.getBlockLabel());
return rootTranslatorBlock.toSim(); rootTranslatorBlock.toSim(sim);
return null;
} }
public BlockAdaptor getBlockAdaptor() public BlockAdaptor getBlockAdaptor()
......
...@@ -7,8 +7,8 @@ import com.ardublock.translator.adaptor.BlockAdaptor; ...@@ -7,8 +7,8 @@ import com.ardublock.translator.adaptor.BlockAdaptor;
import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import com.ardublock.util.SimCodeObject;
import tec.letsgoing.ardublock.simulator.Simulator;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
abstract public class TranslatorBlock abstract public class TranslatorBlock
...@@ -119,4 +119,14 @@ abstract public class TranslatorBlock ...@@ -119,4 +119,14 @@ abstract public class TranslatorBlock
throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.no_sim_for_block")); throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.no_sim_for_block"));
} }
//*********************************************** //***********************************************
/**
* @param sim
* @throws SocketNullException
* @throws BlockException
*/
public void toSim(Simulator sim) throws BlockException, SocketNullException {
// TODO Auto-generated method stub
}
} }
...@@ -4,7 +4,6 @@ import com.ardublock.translator.Translator; ...@@ -4,7 +4,6 @@ import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import com.ardublock.util.SimCodeObject;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
......
...@@ -4,7 +4,7 @@ import com.ardublock.translator.Translator; ...@@ -4,7 +4,7 @@ import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import com.ardublock.util.SimCodeObject;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
......
...@@ -4,7 +4,7 @@ import com.ardublock.translator.Translator; ...@@ -4,7 +4,7 @@ import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import com.ardublock.util.SimCodeObject;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
......
...@@ -4,7 +4,6 @@ import com.ardublock.translator.Translator; ...@@ -4,7 +4,6 @@ import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import com.ardublock.util.SimCodeObject;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
......
...@@ -8,10 +8,14 @@ import com.ardublock.translator.block.exception.BlockException; ...@@ -8,10 +8,14 @@ import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.Simulator;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse; import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf; import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf; import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf;
import tec.letsgoing.ardublock.simulator.simcode.functions.CodeExecuteFunction;
import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction;
...@@ -39,7 +43,7 @@ public class LoopBlock extends TranslatorBlock ...@@ -39,7 +43,7 @@ public class LoopBlock extends TranslatorBlock
return ret; return ret;
} }
public SimCode toSim() throws BlockException, SocketNullException { public void toSim(Simulator sim) throws BlockException, SocketNullException {
Vector<SimCode> vec =new Vector<SimCode>(); Vector<SimCode> vec =new Vector<SimCode>();
TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0); TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0);
while (translatorBlock != null) while (translatorBlock != null)
...@@ -53,6 +57,21 @@ public class LoopBlock extends TranslatorBlock ...@@ -53,6 +57,21 @@ public class LoopBlock extends TranslatorBlock
} }
SimCodeFunction loop =new SimCodeFunction("loop",vec); SimCodeFunction loop =new SimCodeFunction("loop",vec);
return loop;
SimTypeBool boolTrue = new SimTypeBool(true);
Vector<SimCode> mainVec = new Vector<SimCode>();
//mainVec.add(new CodeExecuteFunction("setup"));
Vector<SimCode> loopVec = new Vector<SimCode>();
loopVec.add(new CodeExecuteFunction("loop"));
mainVec.add(new CodeWhile(boolTrue, loopVec));
SimCodeFunction main = new SimCodeFunction("main", mainVec);
//sim.addFunctionsCode(setupCode);
System.out.println("Add new Functions");
sim.stopSimu();
sim.resetFunctions();
sim.addFunctionsCode(loop);
sim.addFunctionsCode(main);
} }
} }
...@@ -2,12 +2,21 @@ package com.ardublock.translator.block.control; ...@@ -2,12 +2,21 @@ package com.ardublock.translator.block.control;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Vector;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; 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.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.Simulator;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
import tec.letsgoing.ardublock.simulator.simcode.functions.CodeExecuteFunction;
import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction;
public class ProgramBlock extends TranslatorBlock public class ProgramBlock extends TranslatorBlock
{ {
...@@ -61,4 +70,6 @@ public class ProgramBlock extends TranslatorBlock ...@@ -61,4 +70,6 @@ public class ProgramBlock extends TranslatorBlock
} }
} }
} }
...@@ -3,6 +3,7 @@ package com.ardublock.translator.block.control; ...@@ -3,6 +3,7 @@ package com.ardublock.translator.block.control;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Vector;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
...@@ -14,6 +15,13 @@ import com.ardublock.translator.block.exception.BlockException; ...@@ -14,6 +15,13 @@ import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.Simulator;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
import tec.letsgoing.ardublock.simulator.simcode.functions.CodeExecuteFunction;
import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class SketchBlock extends TranslatorBlock public class SketchBlock extends TranslatorBlock
...@@ -88,4 +96,63 @@ public class SketchBlock extends TranslatorBlock ...@@ -88,4 +96,63 @@ public class SketchBlock extends TranslatorBlock
} }
} }
public void toSim(Simulator sim) throws BlockException, SocketNullException {
Vector<SimCode> mainVec =new Vector<SimCode>();
Vector<SimCode> setup =new Vector<SimCode>();
Vector<SimCode> loop =new Vector<SimCode>();
//MainPart
TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0);
while (translatorBlock != null)
{
SimCode newSimCode = translatorBlock.toSim();
translatorBlock = translatorBlock.nextTranslatorBlock();
if (newSimCode != null) {
mainVec.add(newSimCode);
}
}
//Setup
translatorBlock = getTranslatorBlockAtSocket(1);
while (translatorBlock != null)
{
SimCode newSimCode = translatorBlock.toSim();
translatorBlock = translatorBlock.nextTranslatorBlock();
if (newSimCode != null) {
setup.add(newSimCode);
}
}
//Loop
translatorBlock = getTranslatorBlockAtSocket(2);
while (translatorBlock != null)
{
SimCode newSimCode = translatorBlock.toSim();
translatorBlock = translatorBlock.nextTranslatorBlock();
if (newSimCode != null) {
loop.add(newSimCode);
}
}
SimCodeFunction setupFunc =new SimCodeFunction("setup",setup);
SimCodeFunction loopFunc =new SimCodeFunction("loop",loop);
sim.stopSimu();
sim.resetFunctions();
SimTypeBool boolTrue = new SimTypeBool(true);
mainVec.add(new CodeExecuteFunction("setup"));
Vector<SimCode> whileVec = new Vector<SimCode>();
whileVec.add(new CodeExecuteFunction("loop"));
mainVec.add(new CodeWhile(boolTrue, whileVec));
SimCodeFunction main = new SimCodeFunction("main", mainVec);
System.out.println("Add new Functions");
sim.addFunctionsCode(setupFunc);
sim.addFunctionsCode(loopFunc);
sim.addFunctionsCode(main);
}
} }
package com.ardublock.translator.block.control; package com.ardublock.translator.block.control;
import java.util.Vector;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; 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.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.Simulator;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
import tec.letsgoing.ardublock.simulator.simcode.functions.CodeExecuteFunction;
import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction;
public class SubroutineBlock extends TranslatorBlock public class SubroutineBlock extends TranslatorBlock
{ {
...@@ -34,4 +45,24 @@ public class SubroutineBlock extends TranslatorBlock ...@@ -34,4 +45,24 @@ public class SubroutineBlock extends TranslatorBlock
ret += "}\n\n"; ret += "}\n\n";
return ret; return ret;
} }
public void toSim(Simulator sim) throws BlockException, SocketNullException {
String funcName= label.trim();
Vector<SimCode> vec =new Vector<SimCode>();
TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1);
while (translatorBlock != null)
{
SimCode newSimCode = translatorBlock.toSim();
translatorBlock = translatorBlock.nextTranslatorBlock();
if (newSimCode != null) {
vec.add(newSimCode);
}
}
SimCodeFunction func =new SimCodeFunction(funcName,vec);
System.out.println("Add new Function");
sim.addFunctionsCode(func);
}
} }
...@@ -5,6 +5,9 @@ import com.ardublock.translator.block.TranslatorBlock; ...@@ -5,6 +5,9 @@ import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.functions.CodeExecuteFunction;
public class SubroutineRefBlock extends TranslatorBlock public class SubroutineRefBlock extends TranslatorBlock
{ {
...@@ -24,4 +27,8 @@ public class SubroutineRefBlock extends TranslatorBlock ...@@ -24,4 +27,8 @@ public class SubroutineRefBlock extends TranslatorBlock
return "\t"+subroutineName + "();\n"; return "\t"+subroutineName + "();\n";
} }
public SimCode toSim() {
return new CodeExecuteFunction(label.trim());
}
} }
...@@ -13,6 +13,8 @@ import javax.swing.JOptionPane; ...@@ -13,6 +13,8 @@ import javax.swing.JOptionPane;
import com.ardublock.core.Context; import com.ardublock.core.Context;
import com.ardublock.translator.AutoFormat; import com.ardublock.translator.AutoFormat;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.control.LoopBlock;
import com.ardublock.translator.block.control.ProgramBlock;
import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNameDuplicatedException; import com.ardublock.translator.block.exception.SubroutineNameDuplicatedException;
...@@ -201,7 +203,7 @@ public class SimulateCodeButtonListener implements ActionListener ...@@ -201,7 +203,7 @@ public class SimulateCodeButtonListener implements ActionListener
return ; return ;
} }
SimCodeFunction loop=new SimCodeFunction("loop",null);
try try
{ {
for (RenderableBlock renderableBlock : commentBlockSet) for (RenderableBlock renderableBlock : commentBlockSet)
...@@ -217,7 +219,10 @@ public class SimulateCodeButtonListener implements ActionListener ...@@ -217,7 +219,10 @@ public class SimulateCodeButtonListener implements ActionListener
translator.setRootBlockName("loop"); translator.setRootBlockName("loop");
Block loopBlock = renderableBlock.getBlock(); Block loopBlock = renderableBlock.getBlock();
code.append(translator.translate(loopBlock.getBlockID())); code.append(translator.translate(loopBlock.getBlockID()));
loop=(SimCodeFunction) translator.simulate(loopBlock.getBlockID()); //FIXME Wie Loop von Programm Block unterscheiden?
translator.simulate(loopBlock.getBlockID(),sim);
//collect simcode objects here -> all SimCodeObjects inside main loop //collect simcode objects here -> all SimCodeObjects inside main loop
//eg. simList.append(translator.simulate(loopBlock.getBlockID())); -> simList = simCodeObject-List //eg. simList.append(translator.simulate(loopBlock.getBlockID())); -> simList = simCodeObject-List
} }
...@@ -227,6 +232,7 @@ public class SimulateCodeButtonListener implements ActionListener ...@@ -227,6 +232,7 @@ public class SimulateCodeButtonListener implements ActionListener
translator.setRootBlockName("subroutine"); translator.setRootBlockName("subroutine");
Block subroutineBlock = renderableBlock.getBlock(); Block subroutineBlock = renderableBlock.getBlock();
code.append(translator.translate(subroutineBlock.getBlockID())); code.append(translator.translate(subroutineBlock.getBlockID()));
translator.simulate(subroutineBlock.getBlockID(),sim);
//collect simcode objects here -> all SimCodeObjects inside main subroutines //collect simcode objects here -> all SimCodeObjects inside main subroutines
//eg. simList.append(translator.simulate(subroutineBlock.getBlockID())); -> simList = simCodeObject-List //eg. simList.append(translator.simulate(subroutineBlock.getBlockID())); -> simList = simCodeObject-List
} }
...@@ -312,20 +318,7 @@ public class SimulateCodeButtonListener implements ActionListener ...@@ -312,20 +318,7 @@ public class SimulateCodeButtonListener implements ActionListener
SimTypeBool boolTrue = new SimTypeBool(true);
Vector<SimCode> mainVec = new Vector<SimCode>();
//mainVec.add(new CodeExecuteFunction("setup"));
Vector<SimCode> loopVec = new Vector<SimCode>();
loopVec.add(new CodeExecuteFunction("loop"));
mainVec.add(new CodeWhile(boolTrue, loopVec));
SimCodeFunction main = new SimCodeFunction("main", mainVec);
//sim.addFunctionsCode(setupCode);
System.out.println("Add new Functions");
sim.stopSimu();
sim.resetFunctions();
sim.addFunctionsCode(loop);
sim.addFunctionsCode(main);
//TODO Autostart? //TODO Autostart?
//TODO ! start simulator here //TODO ! start simulator here
//sim.run(); //sim.run();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment