private Token matchNumber() {
        SourcePosition pos = new SourcePosition(lineNo, columnNo);
        StringBuilder sb = new StringBuilder();
        boolean decimal = false;
        int character = lookAhead(1);
        while ((character >= '0' && character <= '9') || character == '.') {
            if (decimal && character == '.') {
                throw new LexerException("Unexcepted '.' character", lineNo, columnNo);
            } else if (character == '.') {
                decimal = true;
            }
            sb.append((char) character);
            character = next();
        }
        return new Token(pos, TokenType.NUMBER, sb.toString());
    }