diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class index e5cb684..4ef849b 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java b/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java index 187ee36..6761f87 100644 --- a/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java +++ b/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java @@ -138,7 +138,7 @@ public class XParser { if ((id = parseToken(Token.ID)) != null && (assign = parseToken(Token.ASSIGN)) != null - && (numExpr = parseNumExpr()) != null) { + && (numExpr = parseNumExpr0()) != null) { tree.addLastChild(id); tree.addLastChild(assign); tree.addLastChild(numExpr); @@ -149,15 +149,47 @@ public class XParser { return null; } - private Tree parseNumExpr() { + private Tree parseNumExpr0() { int oldPosition = in.getPosition(); Tree tree = new Tree(new Token(Token.EXPR)); - Tree intConst; + Tree intConst, a, operator, b; if ((intConst = parseNumExpr2()) != null) { tree.addLastChild(intConst); return tree; } + in.setPosition(oldPosition); + + if (((a = parseNumExpr2()) != null) + && ((operator = parseToken(Token.MULT)) != null + || ((operator = parseToken(Token.DIV)) != null + || ((operator = parseToken(Token.PLUS)) != null + || ((operator = parseToken(Token.MINUS)) != null)))) + && ((b = parseNumExpr()) != null)) { + tree.addLastChild(a); + tree.addLastChild(operator); + tree.addLastChild(b); + return tree; + } + + in.setPosition(oldPosition); + return null; + } + + private Tree parseNumExpr() { + int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.EXPR)); + Tree id, intConst; + + if ((intConst = parseNumExpr2()) != null) { + tree.addLastChild(intConst); + return tree; + } + + if ((id = parseToken(Token.ID)) != null) { + tree.addLastChild(id); + return tree; + } in.setPosition(oldPosition); return null; @@ -166,13 +198,18 @@ public class XParser { private Tree parseNumExpr2() { int oldPosition = in.getPosition(); Tree tree = new Tree(new Token(Token.EXPR2)); - Tree intConst; + Tree id, intConst; if ((intConst = parseNumExpr3()) != null) { tree.addLastChild(intConst); return tree; } + in.setPosition(oldPosition); + if ((id = parseToken(Token.ID)) != null) { + tree.addLastChild(id); + return tree; + } in.setPosition(oldPosition); return null; } @@ -180,12 +217,18 @@ public class XParser { private Tree parseNumExpr3() { int oldPosition = in.getPosition(); Tree tree = new Tree(new Token(Token.EXPR3)); - Tree intConst; + Tree id, intConst; if ((intConst = parseToken(Token.INTCONST)) != null) { tree.addLastChild(intConst); return tree; } + in.setPosition(oldPosition); + + if ((id = parseToken(Token.ID)) != null) { + tree.addLastChild(id); + return tree; + } in.setPosition(oldPosition); return null; @@ -194,7 +237,7 @@ public class XParser { private Tree parseToken(int tokenType) { int oldPosition = in.getPosition(); Token nextToken = in.nextToken(); - System.out.println("parseToken> " + nextToken); + System.out.println("parseToken> " + nextToken + " = " + Token.getTypeName(tokenType)); if (nextToken.getType() == tokenType) { return new Tree(nextToken); } else {