From 69d7bf47d6acb8323ef3f2d7701312f62a3a67bf Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Mon, 11 Apr 2022 23:40:52 +0200 Subject: [PATCH] work on parser --- .../de/tudresden/inf/st/mg/RobotParser.java | 80 ++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) 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 b21339f..088fae7 100644 --- a/src/main/java/de/tudresden/inf/st/mg/RobotParser.java +++ b/src/main/java/de/tudresden/inf/st/mg/RobotParser.java @@ -27,7 +27,7 @@ public final class RobotParser extends MotionGrammarParser<Tidy> { while (true) { peekObjectAtWrongPlace(); if (peekedObjectAtWrongPlace_ != null) { - parseObjectAtWrongPlace(result.getMoveObjectToCorrectPlaceList(), result.getNumMoveObjectToCorrectPlace()); + parseMoveObjectToCorrectPlace(result.getMoveObjectToCorrectPlaceList(), result.getNumMoveObjectToCorrectPlace()); } else { break; } @@ -41,6 +41,84 @@ public final class RobotParser extends MotionGrammarParser<Tidy> { printAST("parseTidy", result); } + private void parseMoveObjectToCorrectPlace(ASTNode<?> parent, int index) throws ParseException { + MoveObjectToCorrectPlace result = (MoveObjectToCorrectPlace) parent.getChild(index); + + parseObjectAtWrongPlace(result, 0); + parsePickUpObject(result, 1); + parseDropObjectAtRightPlace(result, 2); + + // semantic action for T1 + result.action(getWorld()); + printAST("parseMoveObjectToCorrectPlace", result); + } + + private void parseDropObjectAtRightPlace(ASTNode<?> parent, int index) throws ParseException { + DropObjectAtRightPlace result = (DropObjectAtRightPlace) parent.getChild(index); + + parseRightPlace(result, 0); + parseDrop(result, 1); + + // semantic action for T1 + result.action(getWorld()); + printAST("parseDropObjectAtRightPlace", result); + } + + + private void parsePickUpObject(ASTNode<?> parent, int index) throws ParseException { + PickUpObject result = (PickUpObject) parent.getChild(index); + + parseRobotIsReadyToPick(result, 0); + parsePick(result, 1); + + // semantic action for T1 + result.action(getWorld()); + printAST("parsePickUpObject", result); + } + + private void parseRobotIsReadyToPick(ASTNode<?> parent, int index) throws ParseException { + RobotIsReadyToPick result; + + // try to parse a T + if (peekRobotIsFree()) { + result = new RobotIsReallyReadyToPick(); + parent.setChild(result, index); + parseRobotIsReallyReadyToPick(parent, index); + } else if (peekRobotIsBusy()) { + result = new RobotIsNotReadyToPick(); + parent.setChild(result, index); + parseRobotIsNotReadyToPick(parent, index); + } else { + throw new ParseException("RobotIsReadyToPick", RobotIsFree.type(), RobotIsBusy.type()); + } + + // semantic action for T1 + result.action(getWorld()); + printAST("parsePickUpObject", result); + } + + private void parseRobotIsReallyReadyToPick(ASTNode<?> parent, int index) throws ParseException { + RobotIsReallyReadyToPick result = (RobotIsReallyReadyToPick) parent.getChild(index); + + parseRobotIsFree(result, 0); + + // semantic action for T1 + result.action(getWorld()); + printAST("parseRobotIsReallyReadyToPick", result); + } + + private void parseRobotIsNotReadyToPick(ASTNode<?> parent, int index) throws ParseException { + RobotIsNotReadyToPick result = (RobotIsNotReadyToPick) parent.getChild(index); + + parseRobotIsBusy(result, 0); + parseWait(result, 1); + parseRobotIsReadyToPick(result, 2); + + // semantic action for T1 + result.action(getWorld()); + printAST("parseRobotIsNotReadyToPick", result); + } + private boolean peekObjectAtWrongPlace() { peekedObjectAtWrongPlace_ = getWorld().parseObjectAtWrongPlace(); return peekedObjectAtWrongPlace_ != null; -- GitLab