public void eatAttribute(boolean isMain) { Token nameToken = tokenStream.next(); // Token colonToken = tokenStream.next(); Token valueToken = tokenStream.next(); // Token newlineToken = tokenStream.next(); // This gives the visitor a chance to decide what it wants to do about // the value visitor.visitHeader(nameToken.value(), valueToken.value()); }
public void eatColon() { Token t = tokenStream.next(); assert t.getKind() == TokenKind.COLON; }
public void eatNewline() { assert tokenStream.hasMore(); Token t = tokenStream.next(); assert t.getKind() == TokenKind.NEWLINE; // if (tokenStream.hasMore()) { // Token t = tokenStream.peek(); // if (TokenKind.isNewline(t)) { // tokenStream.next(); // return; // } else { // recordProblem(ManifestProblemKind.EXPECTED_NEWLINE, // t.getStartOffset(), t.getEndOffset(), new String(t.value())); // } // } else { // recordProblem(ManifestProblemKind.UNEXPECTED_EOM, // tokenStream.peekLast().getStartOffset(), tokenStream.peekLast() // .getEndOffset(), "newline"); // } }
public void eatVersionNumber() { Token tok = tokenStream.next(); assert tok.getKind() == TokenKind.VALUE; visitor.visitManifestVersion(tok.value()); }
/** * @return true if able to consume a Newline token from the tokenstream */ private boolean maybeEatNewline() { if (tokenStream.hasMore()) { Token t = tokenStream.peek(); if (TokenKind.isNewline(t)) { tokenStream.next(); return true; } else { return false; } } else { return false; } }
/** * Expects to eat "Name" ":" "<value>" * @return continue? */ public boolean eatNameAttribute() { boolean cont; if (maybeEatHeaderName("Name")) { eatColon(); Token valueToken = tokenStream.next(); tokenStream.next(); // newline cont = visitor.visitSection(false, valueToken.value()); if (!cont) { return false; } visitor.visitHeader(NAME_HEADER, valueToken.value()); } else { Token token = tokenStream.peek(); // ERROR: they didn't supply a Name. Report an error and treat this // as a regular attribute cont = visitor.visitSection(false, null); // still the start of a // section, just has no // name recordProblem(ManifestProblemKind.MISSING_NAME_HEADER, token.getStartOffset(), token.getEndOffset(), token.value()); } return cont; }
/** * Consume a specific Name token from the token stream, report an error if * it is the wrong kind or the wrong name. * * @param expectedName * @return */ private boolean maybeEatHeaderName(String expectedName) { Token t = tokenStream.peek(); if (TokenKind.isName(t)) { if (t.value().equals(expectedName)) { tokenStream.next(); return true; } else { recordProblem(ManifestProblemKind.UNEXPECTED_NAME, t.getStartOffset(), t.getEndOffset(), expectedName, t.value()); return false; } } else { recordProblem(ManifestProblemKind.UNEXPECTED_TOKEN_KIND, t.getStartOffset(), t.getEndOffset(), "Name", t.getKind() .getTokenString()); return false; } }