diff --git a/src/main/java/de/tudresden/inf/st/mg/Main.java b/src/main/java/de/tudresden/inf/st/mg/Main.java index 3acb2474553f7e87a8239d38327ece9d112d599b..905b2809ff27d2bb82a24e1506d3e02641ab7f30 100644 --- a/src/main/java/de/tudresden/inf/st/mg/Main.java +++ b/src/main/java/de/tudresden/inf/st/mg/Main.java @@ -36,7 +36,7 @@ public class Main { e.printStackTrace(); } try { - parser.parseT(); + parser.parse(); } catch (WorldParser.ParseException e) { e.printStackTrace(); } 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 2c285f62f8bbb8064cdb583c1418374dc958c3a2..30b8726f702811574025014923b0d46e250691c1 100644 --- a/src/main/java/de/tudresden/inf/st/mg/RobotParser.java +++ b/src/main/java/de/tudresden/inf/st/mg/RobotParser.java @@ -20,27 +20,9 @@ public final class RobotParser extends MotionGrammarParser<Tidy> { return (World) context_.get(WORLD); } - /** - * Parse a motion grammar with root T - * - * @return the parsed AST of type T - */ - public Tidy parseTidy() throws ParseException { - // don't try this at home - rootContainer_ = new ASTNode<>(); - if (rootContainer_.getNumChild() == 0) { - rootContainer_.addChild(null); - } - printAST("initial", null); - parseTidy(rootContainer_, 0); - Tidy result = rootContainer_.getChild(0); - printAST("complete", null); - result.setParent(null); - rootContainer_.setChild(null, 0); - return result; - } - private void parseTidy(ASTNode<?> parent, int index) throws ParseException { + @Override + protected void parse(ASTNode<?> parent, int index) throws ParseException { Tidy result; if (true) { @@ -49,6 +31,6 @@ public final class RobotParser extends MotionGrammarParser<Tidy> { // semantic action for T result.action(getWorld()); - printAST("parseT", result); + printAST("parseTidy", result); } } diff --git a/src/main/java/de/tudresden/inf/st/mg/WorldParser.java b/src/main/java/de/tudresden/inf/st/mg/WorldParser.java index e5e634f7c1d3f0de8cf45fec792aaacf907a48c2..f263b7263bc1b3098f324d2154be8fab6878dd0d 100644 --- a/src/main/java/de/tudresden/inf/st/mg/WorldParser.java +++ b/src/main/java/de/tudresden/inf/st/mg/WorldParser.java @@ -21,27 +21,8 @@ public final class WorldParser extends MotionGrammarParser<T> { return (World) context_.get(WORLD); } - /** - * Parse a motion grammar with root T - * - * @return the parsed AST of type T - */ - public T parseT() throws ParseException { - // don't try this at home - rootContainer_ = new ASTNode<>(); - if (rootContainer_.getNumChild() == 0) { - rootContainer_.addChild(null); - } - printAST("initial", null); - parseT(rootContainer_, 0); - T result = rootContainer_.getChild(0); - printAST("complete", null); - result.setParent(null); - rootContainer_.setChild(null, 0); - return result; - } - - private void parseT(ASTNode<?> parent, int index) throws ParseException { + @Override + protected void parse(ASTNode<?> parent, int index) throws ParseException { T result; // try to parse a T @@ -66,7 +47,7 @@ public final class WorldParser extends MotionGrammarParser<T> { T1 result = (T1) parent.getChild(index); parseLoad(result, 0); - parseT(result, 1); + parse(result, 1); parseUnload(result, 2); // semantic action for T1 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 ae6f4d611ed1df0a8d2b13cd2df0e7092ce4310a..483ed0e8f7f4d8a67244fcc0fe3fb5c525a55d0b 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 @@ -70,4 +70,26 @@ public abstract class MotionGrammarParser<T extends MotionGrammarElement> { super("Unable to parse token " + expectedToken.name() + "."); } } + + /** + * Parse a motion grammar with root T + * + * @return the parsed AST of type T + */ + public T parse() throws ParseException { + // don't try this at home + rootContainer_ = new ASTNode<>(); + if (rootContainer_.getNumChild() == 0) { + rootContainer_.addChild(null); + } + printAST("initial", null); + parse(rootContainer_, 0); + T result = rootContainer_.getChild(0); + printAST("complete", null); + result.setParent(null); + rootContainer_.setChild(null, 0); + return result; + } + + protected abstract void parse(ASTNode<?> parent, int index) throws ParseException; } 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 8a0327e964c523f30050e773cc4dcb2bd6dbe0b0..efb5b28928024e11af042c1cddc1a43a63391482 100644 --- a/src/test/java/de/tudresden/inf/st/mg/ParserTest.java +++ b/src/test/java/de/tudresden/inf/st/mg/ParserTest.java @@ -41,7 +41,7 @@ public class ParserTest { WorldParser parser = new WorldParser(world); parser.setDebugDiagramDir(AST_DIAGRAM_DIR); - var result = parser.parseT(); + var result = parser.parse(); assertThat(result).isNotNull().isInstanceOf(T1.class); }