/** Report an error at the current token position using the provided * arguments. */ private void lexError(String key, Object... args) { lexError(pos, key, args); }
/** Report an error at the current token position using the provided * arguments. */ private void lexError(String key, Object... args) { lexError(pos, key, args); }
/** Convert an ASCII digit from its base (8, 10, or 16) * to its value. */ private int digit(int base) { char c = ch; int result = Character.digit(c, base); if (result >= 0 && c > 0x7f) { lexError(pos+1, "illegal.nonascii.digit"); ch = "0123456789abcdef".charAt(result); } return result; }
/** Convert an ASCII digit from its base (8, 10, or 16) * to its value. */ private int digit(int base) { char c = ch; int result = Character.digit(c, base); if (result >= 0 && c > 0x7f) { lexError(pos+1, "illegal.nonascii.digit"); ch = "0123456789abcdef".charAt(result); } return result; }
lexError(bp, "illegal.unicode.esc"); } else { bp--;
lexError(bp, "illegal.unicode.esc"); } else { bp--;
/** Read fractional part and 'd' or 'f' suffix of floating point number. */ private void scanHexFractionAndSuffix(boolean seendigit) { this.radix = 16; assert ch == '.'; putChar(ch); scanChar(); while (digit(16) >= 0) { seendigit = true; putChar(ch); scanChar(); } if (!seendigit) lexError("invalid.hex.number"); else scanHexExponentAndSuffix(); }
/** Read fractional part and 'd' or 'f' suffix of floating point number. */ private void scanHexFractionAndSuffix(boolean seendigit) { this.radix = 16; assert ch == '.'; putChar(ch); scanChar(); while (digit(16) >= 0) { seendigit = true; putChar(ch); scanChar(); } if (!seendigit) lexError("invalid.hex.number"); else scanHexExponentAndSuffix(); }
/** Read fractional part of floating point number. */ private void scanFraction() { while (digit(10) >= 0) { putChar(ch); scanChar(); } int sp1 = sp; if (ch == 'e' || ch == 'E') { putChar(ch); scanChar(); if (ch == '+' || ch == '-') { putChar(ch); scanChar(); } if ('0' <= ch && ch <= '9') { do { putChar(ch); scanChar(); } while ('0' <= ch && ch <= '9'); return; } lexError("malformed.fp.lit"); sp = sp1; } }
/** Read fractional part of floating point number. */ private void scanFraction() { while (digit(10) >= 0) { putChar(ch); scanChar(); } int sp1 = sp; if (ch == 'e' || ch == 'E') { putChar(ch); scanChar(); if (ch == '+' || ch == '-') { putChar(ch); scanChar(); } if ('0' <= ch && ch <= '9') { do { putChar(ch); scanChar(); } while ('0' <= ch && ch <= '9'); return; } lexError("malformed.fp.lit"); sp = sp1; } }
scanHexFractionAndSuffix(false); } else if (digit(16) < 0) { lexError("invalid.hex.number"); } else { scanNumber(16); token = ELLIPSIS; } else { lexError("malformed.fp.lit"); break; } else { lexError("unclosed.comment"); return; scanChar(); if (ch == '\'') { lexError("empty.char.lit"); } else { if (ch == CR || ch == LF) lexError(pos, "illegal.line.end.in.char.lit"); scanLitChar(); if (ch == '\'') { token = CHARLITERAL; } else { lexError(pos, "unclosed.char.lit"); scanChar();
scanHexFractionAndSuffix(false); } else if (digit(16) < 0) { lexError("invalid.hex.number"); } else { scanNumber(16); token = ELLIPSIS; } else { lexError("malformed.fp.lit"); break; } else { lexError("unclosed.comment"); return; scanChar(); if (ch == '\'') { lexError("empty.char.lit"); } else { if (ch == CR || ch == LF) lexError(pos, "illegal.line.end.in.char.lit"); scanLitChar(); if (ch == '\'') { token = CHARLITERAL; } else { lexError(pos, "unclosed.char.lit"); scanChar();
putChar('\\'); scanChar(); break; default: lexError(bp, "illegal.esc.char");
putChar('\\'); scanChar(); break; default: lexError(bp, "illegal.esc.char");