diff --git a/src/main/jastadd/LoadWorld.jadd b/src/main/jastadd/LoadWorld.jadd index 4881399fe4b10d6a44087cba5f0062130e997065..135921136296fa74c5c0c60da3f9303a1b0d7978 100644 --- a/src/main/jastadd/LoadWorld.jadd +++ b/src/main/jastadd/LoadWorld.jadd @@ -14,11 +14,9 @@ aspect World { return print(); } - public enum TokenType {UNDEFINED,FULL,LOAD,UNLOAD; } - public static TokenType Token.type() {return TokenType.UNDEFINED; } - public static TokenType Full.type() {return TokenType.FULL; } - public static TokenType Load.type() {return TokenType.LOAD; } - public static TokenType Unload.type() {return TokenType.UNLOAD; } + public static TokenType Full.type() {return TokenType.of("FULL"); } + public static TokenType Load.type() {return TokenType.of("LOAD"); } + public static TokenType Unload.type() {return TokenType.of("UNLOAD"); } public Full World.parseFull() { return null; diff --git a/src/main/jastadd/LoadWorld.jrag b/src/main/jastadd/LoadWorld.jrag index aca640a4190c0ac94b50cb9f4b8fd8bb8991b753..b658ab505e01816b61717e70772aed8a25e2dc07 100644 --- a/src/main/jastadd/LoadWorld.jrag +++ b/src/main/jastadd/LoadWorld.jrag @@ -1,3 +1,6 @@ aspect LoadWorld { syn String Container.print() = "[Container " + getElementCount() + "/" + getCapacity() + "]"; + + syn Container World.asContainer() = null; + eq Container.asContainer() = this; } \ No newline at end of file diff --git a/src/main/jastadd/RobotWorld.jadd b/src/main/jastadd/RobotWorld.jadd index e69ba01777de0f7620b01082bbfaf5d07d703663..02351bbe47b79bda248ba724a2e1952801e383a1 100644 --- a/src/main/jastadd/RobotWorld.jadd +++ b/src/main/jastadd/RobotWorld.jadd @@ -12,6 +12,17 @@ aspect RobotWorld { return new RobotScene(t, b); } + public static TokenType EmptyTable.type() { return TokenType.of("EMPTY_TABLE"); } + public static TokenType ObjectAtWrongPlace.type() { return TokenType.of("OBJECT_AT_WRONG_PLACE"); } + public static TokenType Pick.type() { return TokenType.of("PICK"); } + public static TokenType RobotIsFree.type() { return TokenType.of("ROBOT_IS_FREE"); } + public static TokenType RobotIsBusy.type() { return TokenType.of("ROBOT_IS_BUSY"); } + public static TokenType RobotIsIdle.type() { return TokenType.of("ROBOT_IS_IDLE"); } + public static TokenType RobotHasNoItemAttached.type() { return TokenType.of("ROBOT_HAS_NO_ITEM_ATTACHED"); } + public static TokenType Wait.type() { return TokenType.of("WAIT"); } + public static TokenType RightPlace.type() { return TokenType.of("RIGHT_PLACE"); } + public static TokenType Drop.type() { return TokenType.of("DROP"); } + public static Pose Pose.of(double x, double y, double z) { return new Pose(x, y, z, 0, 0, 0, 1); } diff --git a/src/main/jastadd/RobotWorld.jrag b/src/main/jastadd/RobotWorld.jrag index ee136ab6580ac65cc5c5d6bc710ebac959b6726d..a3560dba5d348c951c064572f35874af3e61a502 100644 --- a/src/main/jastadd/RobotWorld.jrag +++ b/src/main/jastadd/RobotWorld.jrag @@ -7,6 +7,9 @@ aspect RobotWorld { return result + "\n]\n"; } + syn RobotScene World.asRobotScene() = null; + eq RobotScene.asRobotScene() = this; + syn boolean PhysicalObject.isBin() = false; eq Bin.isBin() = true; diff --git a/src/main/jastadd/SemanticActions.jadd b/src/main/jastadd/SemanticActions.jadd index a3edb74e2957dce04df01881010e084a37caf10c..f91e0fe65e16e1635ce7b0847d150ab0c0c29ea1 100644 --- a/src/main/jastadd/SemanticActions.jadd +++ b/src/main/jastadd/SemanticActions.jadd @@ -1,18 +1,18 @@ aspect SemanticActions { - @Override public void Load.action(World world) { + Container container = world.asContainer(); System.out.println("performing semantic action for element Load"); System.out.print(" " + world); - world.setElementCount(world.getElementCount() + 1); + container.setElementCount(world.asContainer().getElementCount() + 1); System.out.println(" -> " + world); } - @Override public void Unload.action(World world) { + Container container = world.asContainer(); System.out.println("performing semantic action for element Unload"); System.out.print(" " + world); - world.setElementCount(world.getElementCount() - 1); + container.setElementCount(container.getElementCount() - 1); System.out.println(" -> " + world); } } \ No newline at end of file diff --git a/src/main/jastadd/common/SemanticActions.jadd b/src/main/jastadd/common/SemanticActions.jadd index d4b7afd9ec5499875b6da5d01776c9c6d912146d..ea271e412fbddfc474cf1c1a8d4e91cd78c68b32 100644 --- a/src/main/jastadd/common/SemanticActions.jadd +++ b/src/main/jastadd/common/SemanticActions.jadd @@ -1,7 +1,7 @@ aspect SemanticActions { public void MotionGrammarElement.action(World world) { - System.out.println("performing semantic action for element " + getClass().getSimpleName()); + System.out.println("NOT performing any semantic action for element " + getClass().getSimpleName()); } } \ No newline at end of file diff --git a/src/main/jastadd/common/Tokens.jadd b/src/main/jastadd/common/Tokens.jadd new file mode 100644 index 0000000000000000000000000000000000000000..6f4d21fa77cb3e32fe89102beb4a39200ecd206e --- /dev/null +++ b/src/main/jastadd/common/Tokens.jadd @@ -0,0 +1,23 @@ +aspect Tokens { + + public class TokenType { + + private String name_; + + private TokenType(String name) { + name_ = name; + } + + public String name() { + return name_; + } + + public static TokenType of(String name) { + return new TokenType(name); + } + + } + + public static TokenType Token.type() {return TokenType.of("UNDEFINED"); } + +} \ No newline at end of file diff --git a/src/main/java/de/tudresden/inf/st/mg/WorldParser.java b/src/main/java/de/tudresden/inf/st/mg/LoadWorldParser.java similarity index 94% rename from src/main/java/de/tudresden/inf/st/mg/WorldParser.java rename to src/main/java/de/tudresden/inf/st/mg/LoadWorldParser.java index f263b7263bc1b3098f324d2154be8fab6878dd0d..3638eb4971643f63f880434d762e7b9a0da6dc82 100644 --- a/src/main/java/de/tudresden/inf/st/mg/WorldParser.java +++ b/src/main/java/de/tudresden/inf/st/mg/LoadWorldParser.java @@ -5,7 +5,7 @@ import de.tudresden.inf.st.mg.jastadd.model.*; -public final class WorldParser extends MotionGrammarParser<T> { +public final class LoadWorldParser extends MotionGrammarParser<T> { private static final String WORLD = "World"; @@ -13,12 +13,12 @@ public final class WorldParser extends MotionGrammarParser<T> { private Unload peekedUnload_ = null; private Full peekedFull_ = null; - public WorldParser(World world) { - context_.put(WORLD, world); + public LoadWorldParser(World world) { + contexts_.put(WORLD, world); } private World getWorld() { - return (World) context_.get(WORLD); + return (World) contexts_.get(WORLD); } @Override diff --git a/src/main/java/de/tudresden/inf/st/mg/RobotParser.java b/src/main/java/de/tudresden/inf/st/mg/RobotParser.java index 6b227c6c957ddabf41c86690e284740f4788bfcb..b21339f2ff102ecd5f97a691cf9146bed6f473e4 100644 --- a/src/main/java/de/tudresden/inf/st/mg/RobotParser.java +++ b/src/main/java/de/tudresden/inf/st/mg/RobotParser.java @@ -11,11 +11,11 @@ public final class RobotParser extends MotionGrammarParser<Tidy> { private ObjectAtWrongPlace peekedObjectAtWrongPlace_ = null; public RobotParser(World world) { - context_.put(WORLD, world); + contexts_.put(WORLD, world); } private World getWorld() { - return (World) context_.get(WORLD); + return (World) contexts_.get(WORLD); } diff --git a/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java b/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java index 483ed0e8f7f4d8a67244fcc0fe3fb5c525a55d0b..0a1dfa9e352c92c77dd0097a432b0ab65a5e0f95 100644 --- a/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java +++ b/src/main/java/de/tudresden/inf/st/mg/common/MotionGrammarParser.java @@ -2,7 +2,10 @@ package de.tudresden.inf.st.mg.common; import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper; import de.tudresden.inf.st.jastadd.dumpAst.ast.SkinParamBooleanSetting; -import de.tudresden.inf.st.mg.jastadd.model.*; +import de.tudresden.inf.st.mg.jastadd.model.ASTNode; +import de.tudresden.inf.st.mg.jastadd.model.MotionGrammarElement; +import de.tudresden.inf.st.mg.jastadd.model.Token; +import de.tudresden.inf.st.mg.jastadd.model.TokenType; import java.io.IOException; import java.nio.file.Path; @@ -13,7 +16,7 @@ import java.util.stream.Collectors; public abstract class MotionGrammarParser<T extends MotionGrammarElement> { - protected final Map<String, ASTNode<?>> context_ = new HashMap<>(); + protected final Map<String, ASTNode<?>> contexts_ = new HashMap<>(); protected ASTNode<T> rootContainer_; private int timeStep_; protected Path astDiagramDir_; @@ -41,7 +44,7 @@ public abstract class MotionGrammarParser<T extends MotionGrammarElement> { try { - for (var contextEntry : context_.entrySet()) { + for (var contextEntry : contexts_.entrySet()) { Dumper.read(contextEntry.getValue()) .setNameMethod(o -> o == null ? "null" : o.getClass().getSimpleName()) .dumpAsPNG(astDiagramDir_.resolve("Context-" + contextEntry.getKey() + "-" + String.format("%03d", timeStep_) + "-" + step + ".png")); @@ -63,7 +66,7 @@ public abstract class MotionGrammarParser<T extends MotionGrammarElement> { public static class ParseException extends Exception { public ParseException(String ruleName, TokenType... expectedTokens) { - super("Unable to parse nonterminal " + ruleName + ". Expected tokens " + Arrays.stream(expectedTokens).map(Enum::toString).collect(Collectors.joining(", ")) + "."); + super("Unable to parse nonterminal " + ruleName + ". Expected tokens " + Arrays.stream(expectedTokens).map(Object::toString).collect(Collectors.joining(", ")) + "."); } public ParseException(TokenType expectedToken) { diff --git a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java index 6dce66723a520209f852728c1b0b1fc8840059a6..82ec1beda7cb1ed0b8745da301f8c75074f21e1c 100644 --- a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java +++ b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java @@ -44,7 +44,7 @@ public class ParserTest { // for some reason, the best random seed value here is 1 and not 0??? Container containerWorld = Container.initialWorld(new Random(1)); - WorldParser parser = new WorldParser(containerWorld); + LoadWorldParser parser = new LoadWorldParser(containerWorld); parser.setDebugDiagramDir(LOAD_AST_DIAGRAM_DIR); var result = parser.parse();