[06 - Top Down Parser] Attempt to fix "program11Expr" tests
This commit is contained in:
Binary file not shown.
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user