From bc72602f89f586a82dae63d0559ef48459fb3ea5 Mon Sep 17 00:00:00 2001 From: Humenius Date: Wed, 13 May 2020 12:14:24 +0200 Subject: [PATCH] [06 - Top Down Parser] Fix "program*" in TestXminTopDownParser.class --- .../bin/de/dhbw/compiler/xparser/XParser.class | Bin 4851 -> 5661 bytes .../src/de/dhbw/compiler/xparser/XParser.java | 64 +++++++++++++++--- 2 files changed, 53 insertions(+), 11 deletions(-) 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 7c4511da3c85eb755dcba48279d09aabc25f0640..1ea3e36bc3ee77b8a89446d515051cb1e9fbe5d2 100644 GIT binary patch literal 5661 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 Bf_(r0 delta 2270 zcmcgu`EOKZ6g}^~nZB9nW0|2)+Tt*5ZRx@yl(Mx_Hj!nh>|JOnP@q5;N|8+&6qKzj z`UC+5!5w0hQqv-Ji5fH!6E(&yMolCtQDan0)T9*8{rY(7Kj1HS?)%=ioOABE-7j|n1+v~jHfQ5xvWMMpp+6A8e`Dxf=Aq{&i>_el8{T2@3poVVwk-2NC>guX$ zRz~L4S5ksQ79PYy7HnBC0Yfc3j7IykC!9J_9wtkeCgFAoGb9vBxKlzg4%CjsuikKydgk*rom&BDw6(EfpmB+;=ST3lcAqxK|!CgZMM~PLKdg-Ls0_v*zHo z|DILooW&w3!exP+5|JyUwwOY}rjh6!=#TkIvWSv#ptE(5LJ9;8iRgj?ck8au+Yuy- zc69IL!n&*de-12&$^NON3KUVsV!~fc;AIrOoH8z<92Mlh9FtI~&KyaKnG~v1Vql6( zEYBg9#1X-vqc3-!#LQ4~(g+DrlW z<#{;lGS5PU_7Fy+=*Q{IymE}IM$}a!&ru`7nVo$j#0fc}12g}r5pM&*YcpJj!g$40#1vM3<-nTkawk@KRnJg}nMH^YX zLKd%*#p`7823fpG7H^ToC9-(ue`CSxS+UsJqme}kCgdmvWo&-nG8w!_2JiDO{(#2( zklKAjgMZBa`Gmgslq^0Yi_gj83$pl<9rqRL@HIQ_8|=juek{IaHNRs8zsJ+Kif8d7 zUZinv-n={cDV#%X;^@Rg%w^__@!%%6NN3z49d)cWo~=7i)u2#5MINx6Use_GJ51zkAWKjjpxHkd`(t?-|dw&e7#s<92#*kSd>_=URu zN~ixufY*4-|IYj44;t@JrAvmorVAYj_~)dMcdC3=eC&Ps!022$fp=_)<5Ts4nM#Y6 La?)bb)=~C12k=VF 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 9391790..0bb307c 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 @@ -65,23 +65,12 @@ public class XParser { } private Tree parseStatList() { - // int oldPosition = in.getPosition(); Tree tree = new Tree(new Token(Token.STATLIST)); Tree stat; while ((stat = parseStatWithSemicolon()) != null) { tree.addLastChild(stat); } - -// if ((block = parseBlock()) != null) { -// tree.addFirstChild(new Tree(new Token(Token.STATWITHSEMI))); -// tree.addFirstChild(block); -// tree.addLastChild(new Tree(new Token(Token.SEMICOLON))); -// -// return tree; -// } - - // in.setPosition(oldPosition); return tree; } @@ -128,6 +117,59 @@ public class XParser { } private Tree parseCondStat() { + int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.CONDSTAT)); + Tree ifKey, cond, then, stat1, elseKey, stat2; + + if ((ifKey = parseToken(Token.IF)) != null + && (cond = parseCond()) != null + && (then = parseToken(Token.THEN)) != null + && (stat1 = parseStat()) != null + && (elseKey = parseToken(Token.ELSE)) != null + && (stat2 = parseStat()) != null) { + + tree.addLastChild(ifKey); + tree.addLastChild(cond); + tree.addLastChild(then); + tree.addLastChild(stat1); + tree.addLastChild(elseKey); + tree.addLastChild(stat2); + return tree; + } + in.setPosition(oldPosition); + + if (((ifKey = parseToken(Token.IF)) != null) + && (cond = parseCond()) != null + && (then = parseToken(Token.THEN)) != null + && (stat1 = parseStat()) != null) { + tree.addLastChild(ifKey); + tree.addLastChild(cond); + tree.addLastChild(then); + tree.addLastChild(stat1); + return tree; + } + + in.setPosition(oldPosition); + return null; + } + + private Tree parseCond() { + int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.COND)); + Tree a, operator, b; + + if ((a = parseNumExpr()) != null + && ((operator = parseToken(Token.EQUALS)) != null + || (operator = parseToken(Token.LESS)) != null + || (operator = parseToken(Token.MORE)) != null) + && (b = parseNumExpr()) != null) { + tree.addLastChild(a); + tree.addLastChild(operator); + tree.addLastChild(b); + return tree; + } + + in.setPosition(oldPosition); return null; }