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 4ef849b..a6f0be5 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 6761f87..c97db4b 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 = parseNumExpr0()) != null) { + && (numExpr = parseNumExpr()) != null) { tree.addLastChild(id); tree.addLastChild(assign); tree.addLastChild(numExpr); @@ -149,75 +149,60 @@ public class XParser { return null; } - private Tree parseNumExpr0() { + private Tree parseNumExpr() { int oldPosition = in.getPosition(); Tree tree = new Tree(new Token(Token.EXPR)); - Tree intConst, a, operator, b; - - if ((intConst = parseNumExpr2()) != null) { - tree.addLastChild(intConst); - return tree; - } - in.setPosition(oldPosition); + Tree a, b, operator; 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)) { + && (((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); + if ((a = parseNumExpr2()) != null) { + tree.addLastChild(a); return tree; } - - if ((id = parseToken(Token.ID)) != null) { - tree.addLastChild(id); - return tree; - } - in.setPosition(oldPosition); + return null; } private Tree parseNumExpr2() { int oldPosition = in.getPosition(); Tree tree = new Tree(new Token(Token.EXPR2)); - Tree id, intConst; + Tree a, b, operator; - if ((intConst = parseNumExpr3()) != null) { - tree.addLastChild(intConst); + if (((a = parseNumExpr3()) != null) + && (((operator = parseToken(Token.MULT)) != null + || (operator = parseToken(Token.DIV)) != null)) + && (b = parseNumExpr2()) != null) { + tree.addLastChild(a); + tree.addLastChild(operator); + tree.addLastChild(b); return tree; } in.setPosition(oldPosition); - if ((id = parseToken(Token.ID)) != null) { - tree.addLastChild(id); + if ((a = parseNumExpr3()) != null) { + tree.addLastChild(a); return tree; } in.setPosition(oldPosition); + return null; } private Tree parseNumExpr3() { int oldPosition = in.getPosition(); Tree tree = new Tree(new Token(Token.EXPR3)); - Tree id, intConst; + Tree sign, intConst, id, num, lbr, rbr; if ((intConst = parseToken(Token.INTCONST)) != null) { tree.addLastChild(intConst); @@ -225,6 +210,14 @@ public class XParser { } in.setPosition(oldPosition); + if (((sign = parseToken(Token.MINUS)) != null + && ((intConst = parseToken(Token.INTCONST))) != null)) { + tree.addLastChild(sign); + tree.addLastChild(intConst); + return tree; + } + in.setPosition(oldPosition); + if ((id = parseToken(Token.ID)) != null) { tree.addLastChild(id); return tree;